$ watch是在init之后直接触发的,为什么?

tid*_*pop 31 angularjs

为什么$ watch会在页面加载后直接触发,如何防止这种情况?

http://jsfiddle.net/dcSRu/2/

function MyCtrl($scope) {
    // Init scope vars
    $scope.data_copy = {};

    // If data_copy changes...
    $scope.$watch("data_copy", function(newValue, oldValue) {

        alert("$watch triggered!");

    }, true);
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*wie 50

在第一次运行时,两个值(newValueoldValue)都相等,因此您可以通过检查相等性来轻松地将其转义:

$scope.$watch("data_copy", function(newValue, oldValue) {
  if(newValue === oldValue){
    return;
  }
  alert("$watch triggered!");
});
Run Code Online (Sandbox Code Playgroud)

PLUNKER

  • 为什么`$ watch`甚至会在`newValue === oldValue`时触发?`$ watch`专门设计用于在不相等时触发. (9认同)