Angular: 为什么要调用 $watch?

Angular: Why is $watch being called?

为什么当 $scope.$watch 正在监视的值在应用程序中的任何地方都不存在时会被调用?

正如您在下面看到的,无论我为 watchExpression 分配什么字符串,函数都会运行 ...

$scope.$watch( 'kwhefjkewgfweahhfwujad' , // a bunch of random letters
               function()
                  { console.log("it fired ... why?");
                  }
              ) ;

Firefox 没有指出任何错误。

尝试

$scope.$watch( 'kwhefjkewgfweahhfwujad', function(val) {
    if (val) {
        console.log("it fired ... why?");
    }
});

观察者 运行 每个摘要周期。当您正在观察附加到范围的原始值时,您需要验证新值是否存在(并且已更改)。

你也可以

$scope.$watch( 'kwhefjkewgfweahhfwujad', function(newVal, oldVal) {
    if (newVal !== oldVal) {
        console.log("it fired ... why?", newVal, oldVal);
    }
});