失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > angular $watch学习(监听数组)

angular $watch学习(监听数组)

时间:2019-04-09 19:13:07

相关推荐

angular $watch学习(监听数组)

文章参考 /u010451286/article/details/50635839

问题:

发现用上面两种方法去监视数组时,会发现即使数组的内容改变了,也没有触发到这个匿名函数?

分析:

watch函数其实是有三个变量的,第一个参数是需要监视的对象,第二个参数是在监视对象发生变化时需要调用的函数,实际上watch还有第三个参数,它在默认情况下是false。

当第三个参数是false时,其实watch函数监视的是数组的地址,而数组的内容的变化不会影响数组地址的变化,所以watch函数失灵了。

解决办法,就是在后面添加第三个参数为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 监视函数的情况。

方法1:监视对象为“函数名()”的字符串,记得加“()”!

//未完成的任务个数$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;});

如果觉得《angular $watch学习(监听数组)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。