$ scope。$ watch在angular.js中加载后没有触发

时间:2013-07-22 01:06:47

标签: javascript angularjs angularjs-scope

我正在使用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');
    });
}

1 个答案:

答案 0 :(得分:0)

目前尚不清楚哪些代码在“之后”运行并更新$scope.students

但是,以下是与更新$ scope数组相关的两个最常见的问题:

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

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