如何在angularjs中阻止/取消绑定之前的$ watch

时间:2015-05-12 11:21:02

标签: 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
  }
}

我有多个标签。单击选项卡时,将调用分页函数:

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

所以它创建了多个$watch,每次我点击标签时都会创建另一个。{/ p>

1 个答案:

答案 0 :(得分:6)

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

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