当oldvalue等于newvalue时,为什么手表会闪光?

时间:2014-01-30 21:25:57

标签: angularjs

我有:

   $scope.$watch('option.sSubject', function (newValue, oldValue) {
                    if (newValue !== oldValue) {

console.log(newValue)
1
undefined
console.log(oldValue)
1
undefined

有人可以解释为什么手表在值似乎没有变化时会触发。请注意,这是我刚刚打开页面的时间。

1 个答案:

答案 0 :(得分:7)

引用来自$ scope的API documentation。$ apply():

  

在观察者注册观察者之后,异步调用侦听器fn(通过$ evalAsync)来初始化观察者。在极少数情况下,这是不合需要的,因为当watchExpression的结果没有改变时会调用监听器。要在侦听器fn中检测此场景,您可以比较newVal和oldVal。如果这两个值相同(===)则由于初始化而调用了监听器。