防止Angular $ watch循环播放

时间:2015-05-19 03:13:40

标签: angularjs angularjs-scope watch angular-digest

我正在整理一个快速货币输入,自动将小数点添加到输入的金额。但是我遇到了一个问题,我的$ watch函数永远循环然后出错。这就是我所拥有的:

$scope.$watch('enteredBillAmount.number', function(newValue, oldValue) {
    if(!angular.equals(newValue, oldValue)) {
        $scope.enteredBillAmount.number = Number(newValue) / 100;
    }
});

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:2)

你的手表功能会改变你正在观看的项目,所以它当然会循环播放。每次该功能运行时,它都会触发手表。

您可以执行以下两项操作之一,或者为数字使用不同的变量:

$scope.$watch('enteredBillAmount.number', function(newValue, oldValue) {
    if(!angular.equals(newValue, oldValue)) {
        $scope.enteredBillAmountNumber = Number(newValue) / 100;
    }
});

但是,考虑到这只是一个格式化功能,您还可以创建一个自定义过滤器:

angular.filter('bill', function() {
  return function(input) {
    return input ?  Number(input) / 100 : '';
  };
});

答案 1 :(得分:0)

Angular有一个你应该考虑使用的内置货币过滤器。这也将使用系统的语言环境,非常方便。您将如何使用它是您输出的地方:



<span id="billedAmount">{{enteredBillAmountNumber | currency}}</span>
&#13;
&#13;
&#13;

如果你需要在控制器中使用它,你可以注入$ filter然后使用:

&#13;
&#13;
var myFormattedAmount =  $filter('currency')($scope.enteredBillAmountNumber);
&#13;
&#13;
&#13;