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);
})