我不太清楚为什么$ scope对象作为观察者和监听器函数的参数提供。 我找到了his bit of code on GitHub,它是在$ digest中迭代观察者数组的部分:
this.$$watchers.forEach(function(watcher) {
var newValue = watcher.watchFn(self);
var oldValue = watcher.last;
if (watcher.deep && newValue === oldValue) {
deppCompare(newValue, oldValue);
} else {
if (newValue !== oldValue) dirty = true;
}
watcher.listenerFn(newValue, oldValue, self);
watcher.last = newValue;
});
答案 0 :(得分:0)
在幕后,当你在某个范围内声明它是一个监视函数时,angular解析函数中给出的表达式:
//The code of a random watcher
$scope.$watch('myVariable', listenerFunction);
//Behind the scenes
$scope.$watch(function(scope){
return scope.myVariable;
}, listenerFunction);
当您注册观察者时,预期的行为是“在此范围中,我需要观察此范围中附加变量的变化”,因此,背后由angular解析的$watch()
的第一个参数返回预期变量应该是附加监视函数的范围内的变量。