文章参考 http://blog.csdn.net/u010451286/article/details/50635839
问题:
发现用上面两种方法去监视数组时,会发现即使数组的内容改变了,也没有触发到这个匿名函数?
分析:
watch函数其实是有三个变量的,第一个参数是需要监视的对象,第二个参数是在监视对象发生变化时需要调用的函数,实际上watch还有第三个参数,它在默认情况下是false。
当第三个参数是false时,其实watch函数监视的是数组的地址,而数组的内容的变化不会影响数组地址的变化,所以watch函数失灵了@H_502_10@。
解决办法,就是在后面添加第三个参数为true就好。
例子:
$scope.items=[ {a:1},{a:2} {a:3}]; $scope.$watch('items',function(){...},true);
$watch 监听多个变量
例子:
//当count或page变化时,都会执行这个匿名函数 $scope.count=1; $scope.page=1; $scope.$watch('count + page',function(){ ... });
$watch 函数的返回结果
在写代码的时候,有时会遇到要监视一个函数返回的结果是否变化的情况,所以查了一下$watch 监视函数的情况。
//未完成的任务个数 $scope.unDoneCount = function() { var count = 0; angular.forEach($scope.todoList,function(todo) { count += todo.done ? 0 : 1; }); return count; }; //单选影响全选部分 $scope.$watch('unDoneCount()',function(nv) { $scope.isDoneAll = nv ? false : true; });
方法2:在监视对象中设置为匿名函数,返回要监视的函数的返回值(绕晕了…)
$scope.$watch(function(){ return $scope.unDoneCount();//不要忘了(),要执行的啊~ },function(nv) { $scope.isDoneAll = nv ? false : true; });