角度监视如果newValue发生更改,则触发

时间:2014-11-06 10:00:32

标签: angularjs angularjs-ng-repeat watch

我想根据重复中的其他值更改值。我做了一块手表,但问题是,如果我改变手表内的newValue,手表会再次触发。

有没有办法解决这个问题

我的手表:

 $scope.$watch('objlist', function(newValue, oldValue) {
    $scope.counter += 1;
    for (var count = 0; count < newValue.length; ++count) {
      if (typeof newValue[count] != "undefined" && (typeof oldValue == "undefined" || newValue[count].value1 != oldValue[count].value1)) {
        newValue[count].value3 = newValue[count].value1 * newValue[count].value2;
        newValue[count].value3 = Number(newValue[count].value3).toFixed(2);

      }
      if (typeof newValue[count] != "undefined" && (typeof oldValue == "undefined" || newValue[count].value3 != oldValue[count].value3)) {
        newValue[count].value1 = newValue[count].value3 / newValue[count].value2;
        newValue[count].value1 = Number(newValue[count].value1).toFixed(2);

      }
    }
  }, true);

我已经包含了一个向您展示我的意思。

plunker

如您所知,如果更改字段1或3的值,它会自动将2添加到计数器并将两者都设置为toFixed(2)。这使得编辑字段变得很困难。

我们使用角度1.2.25

1 个答案:

答案 0 :(得分:0)

你可以使用条件的小技巧。

例如:

$scope.watchActivated = true;

$scope.$watch('objlist', function(newValue, oldValue) {
    if ( $scope.watchActivated ) {
$scope.watchActivated = false;
   $scope.counter += 1;
  for (var count = 0; count < newValue.length; ++count) {
  if (typeof newValue[count] != "undefined" && (typeof oldValue == "undefined" || newValue[count].value1 != oldValue[count].value1) )
{
   newValue[count].value3 =  newValue[count].value1 * newValue[count].value2;
  newValue[count].value3 = Number(newValue[count].value3).toFixed(2);

}
  if (typeof newValue[count] != "undefined" && (typeof oldValue == "undefined" || newValue[count].value3 != oldValue[count].value3) )
{
     newValue[count].value1 =  newValue[count].value3 / newValue[count].value2;
  newValue[count].value1 = Number(newValue[count].value1).toFixed(2);

}
}
$scope.watchActivated = true;
}
}, true);

远非优雅,但应该有效。 小心的代码可能不太好我只是做了一个快速编辑。