Controller' Init'功能执行不止一次

时间:2018-06-07 23:25:48

标签: angularjs

这是我的控制器

//init
var init = function () {

    $scope.getAlbumList();

};    

$scope.getAlbumList = function () {

    AlbumService.getAlbumList()
        .then(function (data) {
            $scope.albumList = data;
    });

};

$scope.viewAlbum = function () {

    AlbumService.getAlbum()
        .then(function (data) {
            $scope.album = data;
            $location.path("/album");
        });               

};

init();

这是我的routeProvider

   when('/albums', {
        templateUrl: 'WebApp/albums.html',
        controller: 'AlbumController'

    }).


    when('/album', {
        templateUrl: 'WebApp/albumview.html',
        controller: 'AlbumController'
    }).

所以AlbumController处理相册和albumview页面。 创建控制器后,将调用init函数,该函数将调用getAlbumList函数。

问题是当用户点击相册转到其相册视图页面时,会再次创建控制器。这最终再次执行init函数,这反过来导致对getAlbumList的不期望的第二次调用。

基本上,我需要在为' / albums'创建控制器时调用getAlbumList。但不是' / albumview'。

我怎样才能做到这一点? 显然,我可以通过为/albumview创建第二个控制器来解决这个问题,但这似乎是不必要的,我宁愿在一个控制器中拥有关于相册的所有内容。

3 个答案:

答案 0 :(得分:2)

你有2个解决方案:

  1. 在你的控制器测试中,如果location.path()=='albums'
  2. 在相册ng-init="getAlbumList()"
  3. 的html页面中

答案 1 :(得分:1)

最快的选择可能是检查路径,看看你是否在专辑或专辑中。以下是如何执行此操作的示例代码:

if ($location.url().toLowerCase() === '/albums') {
  // call to getAlbumList here 
}

答案 2 :(得分:0)

如果您在路由器中有controller: 'AlbumController'且您的html有ng-controller = "AlbumController",则会发生这种情况。只使用一个以避免双重启动。