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

Angularjs $watch在init之后直接触发,为什么?,angularjs,Angularjs,为什么在页面加载后直接触发,如何防止这种情况 第一次运行时,两个值(newValue和oldValue)相等,因此您可以通过检查相等性轻松地将其转义: $scope.$watch("data_copy", function(newValue, oldValue) { if(newValue === oldValue){ return; } alert("$watch triggered!"); }); 这里已经有了一个非常好的讨论: $scope.$watch('fie

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

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

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

这里已经有了一个非常好的讨论:

$scope.$watch('fieldcontainer',函数(新的\u fieldcontainer,旧的\u fieldcontainer){

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

//这里还有处理已更改对象的其他代码

}))


将$watch函数包装为angular ready函数

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

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

Ahh,谢谢!但是我真的可以用===来比较这两个对象吗?我是否应该使用下划线的u.isEqual(newValue,oldValue)?可能,但我已经使用下划线了,所以我使用了下划线,效果很好。@tidelipop为什么需要u.isEqual,对于$watch init,newValue-oldValue将是相同的。在您的案例中,初始值是多少?为什么
$watch
即使在
newValue===oldValue
的情况下也会开火
$watch
专门设计用于在它们不相等时触发。@Posest+1-是,为什么需要这样做?如果在页面加载后一段时间启动了控制器或指令,也会出现这种情况。
angular.element(document).ready(function() 
{ 
  $scope.$watch("data_copy", function(newValue, oldValue) {
    alert("$watch triggered!");
  }, true);
})