Javascript AngularJS$watch函数反复调用-如何防止

Javascript AngularJS$watch函数反复调用-如何防止,javascript,angularjs,Javascript,Angularjs,在函数调用中,我需要检查数组元素中的更改。 如果发生任何更改,我需要函数继续或停止执行 $scope.myFunction = function() { $scope.watchCollection('checkedCountry',function(newval,oldval) { if (newval!==oldval) { console.log("dothings"); // this is executing multiple

在函数调用中,我需要检查数组元素中的更改。 如果发生任何更改,我需要函数继续或停止执行

$scope.myFunction = function() {
    $scope.watchCollection('checkedCountry',function(newval,oldval) {
         if (newval!==oldval) {
               console.log("dothings");  // this is executing multiple times. 
         } 
    })
} 
但是对于myFunction的一次调用,我得到了多次dothings的输出


我需要它在函数调用和集合更改时只工作一次

根据您共享的代码,将设置的手表数量与调用函数
myFunction
的次数成正比。因此,每次调用
myFunction
都会设置一个新手表。因此,更改集合将触发所有手表

通常,手表是在某种类型的初始化函数中设置的,该函数只调用一次


我建议您将手表设置移到
myFunction
呼叫之外

如果我把手表移到我的功能范围之外。是否有方法检查集合在调用my函数时是否有任何更改。不确定您的场景,但您的监视代码应该有方法代码?我所看到的w.r.t watch的主要场景是,我们希望在集合更改时触发某些内容。我的问题在于何时调用该函数。。然后我必须检查我的集合中是否有任何更改。@Explore-X您需要在函数后设置true值。。这将深入监视您的集合
$scope.watchCollection('checkedCountry',function(newval,oldval){if(newval!==oldval){console.log(“dothings”);//这将执行多次。}},true)
方法是在watch回调设置中设置一些变量,如
changed=true
,在函数
myFunction
中检查
changed
的值,如果为true,则执行操作,然后将其重置为
false