32

为什么$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);
}
4

3 回答 3

50

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

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

PLUNKER

于 2013-04-08T09:14:14.027 回答
2

将 $watch 函数包装成角度就绪函数。

angular.element(document).ready(function() 
{ 
  $scope.$watch("data_copy", function(newValue, oldValue) {
    alert("$watch triggered!");
  }, true);
})

当角度加载页面时。它更改值并触发 $watch。

于 2017-01-16T13:37:57.543 回答
0

这里已经有一个很好的讨论:

在 AngularJS 中观看模型更改时如何忽略初始负载?

$scope.$watch('fieldcontainer', function (new_fieldcontainer, old_fieldcontainer) {

if (typeof old_fieldcontainer === 'undefined') 返回;

// 此处用于处理更改对象的其他代码。

});

于 2015-11-13T10:35:28.340 回答