2016-05-13 5 views
0

をangularjsリストビューをリフレッシュするために$ウォッチを追加します。は、配列を移入し、その後、私はこのようなものに見えるコントローラ持っ

(関数(){ は「厳格な使用を」;

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(); 
    }); 
} 
})(); 

元のデータがサービスから引き出され、ポスト配列に適切な値が設定されていますが、配列のデータが変更された場合、ビューを更新するのに問題があります。見る。

助けがありますか?よろしくお願いいたします。

+0

これにはいくつかの問題があります。最初は、 '$ watchCollection'が' getPosts'非同期メソッドを呼び出していますが、データで何もしません。また、 '$ scope'とControllerAsを同じコントローラに混在させていると、混乱を招く恐れがあります。 – Claies

答えて

0

が無限ループを取得する理由:

  1. $scope.$watchCollection('posts',function(){...})はあなたのビューを更新しpostが変わっあなたpost配列、時計リスナーがをトリガー見ました。

  2. その後、リスナー、PostService.getPosts();を行う$scope.posts = p.data;で解決し、これはまたpost変更(より:postは何もあなたのビューに変更していない理由です、バックエンドからバックデータに設定されて)を、その後、時計リスナーが再びを引き起こしました。その後、もう一度PostService.getPosts();をやり直してください。

  3. 無限ループが発生します。

関連する問題