提供$ scope对象作为$ digest中观察者的参数的逻辑

时间:2016-04-18 15:14:53

标签: javascript angularjs function

我不太清楚为什么$ 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;
  });

1 个答案:

答案 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()的第一个参数返回预期变量应该是附加监视函数的范围内的变量。