是否可以在$ watch的scope属性上设置一个不触发$ watch回调的值?

时间:2013-12-08 00:04:52

标签: angularjs

是否可以设置count而不是触发$watch回调?

$scope.count=1;
$scope.$watch('count',function(){...});

感谢。

3 个答案:

答案 0 :(得分:9)

您可以使用setTimeout等待Angular的摘要周期完成,然后运行您的代码:

setTimeout(function(){
    $scope.count = 1;
},0)

这样,角度代码完成运行,检查更改,然后设置属性而不涉及Angular。

答案 1 :(得分:4)

不,但您可以在回调中添加控制变量逻辑

$scope.$watch('count',function(){
 if ($scope.bypass) return;
 //else ....
});

答案 2 :(得分:3)

有点儿。您可以使用$ watch监听器功能。所以不要使用:

$scope.$watch('count',function(){...});

您将使用:

scope.$watch(
  function() {
    // return the condition you do want evaluated.  Whenever this return value changes
    // from the previous $digest cycle the change handler function below will be called. 
    // The return value will be passed in as `newValue` (and the previous as `oldValue`)
    // in the change handler.
 },
function(newValue,oldValue){...});

编辑:由于看起来你正在尝试观察2个不同的变量,另一个选项可能是使用watchCollection,如果有任何变化将会触发(因此你可以为两者加上一个统一处理程序):

$scope.$watchCollection(['count','otherCount'], function(newValues, oldValues) { ...});