1

angular.js を使用しており、変数が変更されたときに $watch を使用して関数を起動しようとしています。データが最初にロードされたときに発生しますが、その後では発生しません。ここで何が起こっているのか正確にはわかりませんか?

コードを以下に貼り付けます。

function gradeChart($scope, $http) {
   $http.get('studentData.json').success(function(data) {
       $scope.students = data;
   });

    $scope.$watch('students',function(change){
       console.log('this fires on load but not after');
    });
}
4

1 に答える 1

0

どのコードが「後に」実行され、更新されるかは明確ではありません$scope.students

ただし、$scope 配列の更新に関連する 2 つの最も一般的な問題は次のとおりです。

  1. 新しい配列に再割り当て$scope.studentsすると、$watch はまだ前の配列 (参照) を参照している可能性があります。angular.copy()「後」コードで使用してみてください:
    angular.copy(data, $scope.students);

  2. 配列の要素の 1 つを変更する場合は、$watchCollection (使用している Angular のバージョンで利用可能な場合) を使用するか、参照の代わりにオブジェクトの等価性をチェックする必要があります (3 番目のパラメーターに注意してください)。
    $scope.$watch('students',function(change){...}, true);

于 2013-07-22T18:48:40.637 に答える