加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angular $watch学习(监听数组)

发布时间:2020-12-17 09:44:56 所属栏目:安全 来源:网络整理
导读:文章参考 http://blog.csdn.net/u010451286/article/details/50635839 问题: 发现用上面两种方法去监视数组时,会发现即使数组的内容改变了,也没有触发到这个匿名函数? 分析: watch函数其实是有三个变量的,第一个参数是需要监视的对象,第二个参数是在

文章参考 http://blog.csdn.net/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;
});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读