$ scope。$ watch将非现有变量作为值

时间:2015-01-28 16:43:09

标签: angularjs

我一直试图理解$ scope对象上的$ watch函数。这看起来非常简单,但我不理解的是,当我在value函数中传递一个不存在的$ scope对象变量时,为什么(在页面加载时)正在执行监听器函数。

$scope.$watch ('nonExistingVariableIdentifier', function () { console.log('Variable value changed'); });

我错过了什么吗?

1 个答案:

答案 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