Javascript 如何在angularjs中防止/解除绑定以前的$watch

Javascript 如何在angularjs中防止/解除绑定以前的$watch,javascript,jquery,angularjs,angularjs-scope,Javascript,Jquery,Angularjs,Angularjs Scope,我正在以动态方式使用$watch,因此每次调用时,我都会创建另一个$watch,同时我想解除先前$watch的绑定 $scope.pagination =function(){ $scope.$watch('currentPage + numPerPage', function (newValue,oldValue) { $scope.contestList = response; //getting response form $http } } 我有多个标签。单

我正在以动态方式使用
$watch
,因此每次调用时,我都会创建另一个
$watch
,同时我想解除先前
$watch
的绑定

$scope.pagination =function(){
  $scope.$watch('currentPage + numPerPage', function (newValue,oldValue) {      
    $scope.contestList = response; //getting response form $http
  }
}
我有多个标签。单击选项卡时,将调用分页函数:

$scope.ToggleTab = function(){
    $scope.pagination();
}

因此,它创建了多个
$watch
,每次我单击选项卡,它都会创建另一个。

在添加新手表之前,您需要检查该手表是否已经存在。如果它已经存在,您可以调用
watcher()
,这将从
$scope.$$watchers
数组中删除该watcher。然后注册你的手表。这将确保您的手表只创建过一次

var paginationWatch;
$scope.pagination = function() {
    if (paginationWatch) //check for watch exists
        paginationWatch(); //this line will destruct watch if its already there
    paginationWatch = $scope.$watch('currentPage + numPerPage', function(newValue, oldValue) {
            //getting response form $http`
            $scope.contestList = response;
        }
    });
}

很高兴为您提供帮助..谢谢:)将
$watch
返回的函数命名为
注销者
,这是一个很好的做法,因为它是一个在您不想再观看时进行清理的函数--它绝对不是一个观察者