当数字设置为相同值时,为什么手表似乎避免触发

时间:2015-01-19 14:54:08

标签: angularjs watch

我正在尝试做类似于this plunker的事情。请注意,我使用ng-click事件将数字的值设置回相同的数字。但是,这种变化似乎并没有发生。

$scope.$watch('value', function(newValue, oldValue){
  console.log("Value changed from "+oldValue+" to "+newValue);
});
$scope.call = function(){
  console.log("Call is called");
  $scope.value=1;
}

所以我将其更改为以下内容......

$scope.call = function(){
  console.log("Call is called");
  $scope.value=0;
  $scope.value=1;
}

然而,this will seem to solve the issue(虽然非常混乱)仍然没有火警。

$scope.name = 'World';
$scope.value = {};
$scope.value.value=1;
$scope.$watch('value', function(newValue, oldValue){
  console.log("Value changed from "+oldValue.value+" to "+newValue.value);
});
$scope.call = function(){
  console.log("Call is called");
  $scope.value = {};
  $scope.value.value=1;
}

所以问题是,这里发生了什么,为什么我不能看到设置为相同值的数字?是否有更清洁的方法来处理这个问题?

1 个答案:

答案 0 :(得分:1)

此行为为documented(向下滚动至$ watch部分)

  

仅当来自当前的值时才调用侦听器   watchExpression和之前调用watchExpression不相等   (初始运行除外)。
  不平等是   根据参考不等式确定,严格比较通过   !== Javascript运算符,除非objectEquality == true ...