的AngularJS全局变量的正确姿势是由行动范围监测

如果你只是想知道结论:


美元美元(美元rootscope.xxx范围看,功能(newval,oldval){
做某事
})


立刻有人问为什么不:


rootscope美元。美元的手表(XXX
做某事
})


从我最近的错误,说为什么它采取第一种方式。

逻辑如图,一开始我的写作rootscope美元。美元的美元因为AngularJS看rootscope有效尽快注册。我的全局变量是订单信息。也就是说,不同的控制器已经改变了他。每一次改变会触发rootscope美元。美元的手表进入其他控制器,你可以看看播出rootscope美元美元作为一个整体。

事实上,这不是唯一的检查角度源代码的方法,不难找到手表的方法,源代码不分为以下代码:


返回函数deregisterwatch(){
如果(arrayremove(阵列,守望者)> = 0){
incrementwatcherscount(范围,1);
}
lastdirtywatch = null;
};


这段代码告诉我们手动清理表是可行的:


无功者= rootscope美元。美元的手表(XXX),功能({ });
手动删除监视程序
观察者();


这很简单。上述方法也可用于观察范围。

当我在这里学习的时候,我觉得有一个小问题。我将被清理在$范围内吗所以调用,继续转源代码,我发现了下面的代码:


侦听器和/禁用侦听器,应用摘要方法
这一美元的破坏=,=这消化美元。美元=这申请。evalasync美元=这applyasync美元=空;
This.$on = this.$watch = this.$watchGroup = function () {
返回空;
};
这个$ $监听器= {;


上面的代码是本文AngularJS全局变量听众正确的姿势。我希望你能帮助我。