Angular $ watch - 仅执行一次监视

时间:2016-06-30 08:01:08

标签: angularjs angular-digest

我在$watch值上有一个简单的dropdown

$scope.view;
$scope.$watch('view', function(){
  console.log(1);       
  // watch block
}

该值与ng-model链接:

<select ng-model="view" ng-options="x for x in name">
</select>

由于$digest值打印两次,有没有办法告诉angular只执行一次$watch块?

2 个答案:

答案 0 :(得分:1)

简单回答:在第一次成功运行后取消注册手表:

var viewWatch = $scope.$watch('view', function () {
  viewWatch(); // Stops the watch
  console.log(1);       
  //watch block
};

然而,这可能会或可能不会产生您想要的结果,因为有时在初始化时调用$watch。您可能想要设置一些条件:

var viewWatch = $scope.$watch('view', function (currentValue, oldValue) {
  if (currentValue && !oldValue) {
    viewWatch(); // Stops the watch
    console.log(1);       
    //watch block
  }
};

答案 1 :(得分:1)

您可以通过测试参数来测试是否第一次设置view(声明)或即将更改(通过选择):

$scope.$watch('view'), function(newVal, oldVal) {
  if (oldVal && oldVal != newVal) {
    console.log(1)
  }
}