为了账号安全,请及时绑定邮箱和手机立即绑定

关于$watch 的问题

        angular.module("exampleApp",[])

                .directive("unorderedList",function(){

                       return function(scope, element, attrs){

                           var data= scope[attrs["unorderedList"]];

                           var propertyExpression = attrs["listProperty"];

                           if(angular.isArray(data)){

                               var listElem = angular.element("<ul>");

                               element.append(listElem);

                               for(var i=0; i< data.length; i++){


                                   (function(){

                                       var itemElement =angular.element("<li>");

                                       listElem.append(itemElement);

                                       var index = i;

                                       var watcherFn = function(watchScope){

                                           console.log("watcherFn: " +index +"  "+data[index].name);

                                           return  watchScope.$eval(propertyExpression, data[index]);

                                       }

                                       scope.$watch(watcherFn, function(newValue,oldValue){

                                           console.log("$watch: "+index);

                                           itemElement.text(newValue);

                                       });

                                   }())

                               }

                           }

                       }

                })


谁能解释一下 $watch中第一个参数如果是个函数 那么应该怎么判定 它是否发生了变化,因为我尝试过 让这个函数每次的返回值都一样 ,可是我发现 即便如此$watch的第二个参数还是被触发了。

正在回答

1 回答

你的$watch检测watcherFn这个函数,$watch会调用$parse解析,将解析后的结果通过调用$$watchDelegate来判断你的新老值的变化,在angular.js的12977行你设个断点调试下,看值有啥变化

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
AngularJS实战
  • 参与学习       205465    人
  • 解答问题       1158    个

一起学习AngularJS的基础教程,通过实例学习并学会AngularJS

进入课程

关于$watch 的问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信