填充数组,然后添加$ watch以刷新列表视图angularjs

时间:2016-05-13 01:50:18

标签: angularjs angularjs-scope

我有一个看起来像这样的控制器:

(function(){     "使用严格的&#34 ;;

angular.module("app")
    .controller("postsController", postsController);

function postsController($scope, $http, $uibModal, PostService) {
    var vm = this;

    $scope.posts = [];

    PostService.getPosts()
        .then(function (p) {
            $scope.posts = p.data;
        }, function (error) {
            vm.errorMessage = "Failed to load data: " + error;
        });

    $scope.$watchCollection('posts', function(newPosts, oldPosts) {
        PostService.getPosts();
    });
}
})();

从服务中提取原始数据,并正确填充posts数组。但是,如果数组中的数据已更改,则无法刷新视图。视图中没有任何反应,或者我看到$ watch的无限循环。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

为什么获得无限循环:

  1. $scope.$watchCollection('posts',function(){...})观看了您的post数组,当您刷新视图并post已更改,监听侦听器已触发

  2. 然后听众执行PostService.getPosts();,使用$scope.posts = p.data;解决,这也会更改post(更多:post已设置回来自后端的数据,这就是为什么您的视图中没有任何变化),然后再次监听侦听器。然后再次PostService.getPosts();,然后一次又一次。

  3. 所以你得到一个无限循环。