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 数组相关的两个最常见的问题:

  1. 如果您重新分配$scope.students给一个新数组, $watch 可能仍在查看前一个数组(参考)。尝试angular.copy()在您的“之后”代码中使用:
    angular.copy(data, $scope.students);

  2. 如果要更改数组的元素之一,则需要使用$watchCollection(如果它在您使用的 Angular 版本中可用)或检查对象相等性而不是引用(注意第三个参数):
    $scope.$watch('students',function(change){...}, true);

于 2013-07-22T18:48:40.637 回答