我一直试图理解$ scope对象上的$ watch函数。这看起来非常简单,但我不理解的是,当我在value函数中传递一个不存在的$ scope对象变量时,为什么(在页面加载时)正在执行监听器函数。
$scope.$watch ('nonExistingVariableIdentifier', function () { console.log('Variable value changed'); });
我错过了什么吗?
答案 0 :(得分:3)
手表在创建时运行。
完全使用$ watch是:
$scope.$watch("nonExistantVariable", function(newValue, oldValue) {
if (newValue == oldValue) {
// First run
}
else {
// After First run
}
})
这是区分初始化和实际更改的正确方法。
在观察者注册观察者之后,异步调用侦听器fn(通过$ evalAsync)来初始化观察者。在极少数情况下,这是不合需要的,因为当watchExpression的结果没有改变时会调用监听器。要在侦听器fn中检测此场景,您可以比较newVal和oldVal。如果这两个值相同(===)则由于初始化而调用了监听器。
来自Angular JS Docs for $ watch - Docs