javascript - $scope.$watch 在 angular.js 中加载后不会触发

标签 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');
    });
}

最佳答案

尚不清楚什么代码“之后”运行并更新$scope.students

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

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

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

关于javascript - $scope.$watch 在 angular.js 中加载后不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17778569/

相关文章:

javascript - 未评估的 ng 类

javascript - Angular js 服务值不会在 View 中更新

javascript - Chrome : How to abort a script that is stopped at `debugger` statement?

javascript - 如何防止 jQuery 选择器包含嵌套元素?

javascript - AngularJS : Appending the same structure on the click of each item

java - spring mvc无法访问.html文件

javascript - 在加载 Angularjs 时从 Controller 初始化所有 ng-model

javascript - 指令采用同一实例的范围

javascript - jQuery 在用户滚动出元素时查找

javascript - 在 javascript 中使用关联数组