我多次看到这种模式:
$scope.$watch('full_name', function(newVal, oldVal, scope) {
if(newVal === oldVal) {
return
} else {
}
}
我不太了解if(newVal==oldVal)
分支,因为它看起来没用..只有在监视值被更改时才调用侦听器回调函数?如果是这种情况,newVal
是否应始终与oldVal
不同?
如果没有,是否有人有关于newVal==oldVal
分支可以做什么的例子?
谢谢!
答案 0 :(得分:3)
if (newVal === oldVal)
构造是跳过初始化。 AngularJS documentation指出,当您附加手表时,它会使用undefined, undefined
调用一次回调。为防止您的监视功能将此调用误认为是模型更改,您可以添加if
构造。
在观察者注册观察者之后,异步调用侦听器fn(通过$ evalAsync)来初始化观察者。在极少数情况下,这是不合需要的,因为当watchExpression的结果没有改变时会调用监听器。要在侦听器fn中检测此场景,您可以比较newVal和oldVal。如果这两个值相同(===)则由于初始化而调用了监听器。