为什么$watch会在页面加载后直接触发,我该如何防止这种情况?
function MyCtrl($scope) {
// Init scope vars
$scope.data_copy = {};
// If data_copy changes...
$scope.$watch("data_copy", function(newValue, oldValue) {
alert("$watch triggered!");
}, true);
}
答案 0 :(得分:50)
首次运行时,两个值(newValue
和oldValue
)相等,因此您可以通过检查相等性来轻松转义它:
$scope.$watch("data_copy", function(newValue, oldValue) {
if(newValue === oldValue){
return;
}
alert("$watch triggered!");
});
答案 1 :(得分:1)
将$ watch功能包装到角度就绪功能中。
angular.element(document).ready(function()
{
$scope.$watch("data_copy", function(newValue, oldValue) {
alert("$watch triggered!");
}, true);
})
当角度加载页面时。它会更改值并触发$ watch。
答案 2 :(得分:0)
这里已经有了一个非常好的讨论:
How do I ignore the initial load when watching model changes in AngularJS?
$ scope。$ watch('fieldcontainer',function(new_fieldcontainer,old_fieldcontainer){
if(typeof old_fieldcontainer ==='undefined')return;
//此处处理更改对象的其他代码。
});