我正在整理一个快速货币输入,自动将小数点添加到输入的金额。但是我遇到了一个问题,我的$ watch函数永远循环然后出错。这就是我所拥有的:
$scope.$watch('enteredBillAmount.number', function(newValue, oldValue) {
if(!angular.equals(newValue, oldValue)) {
$scope.enteredBillAmount.number = Number(newValue) / 100;
}
});
任何建议都将不胜感激。
答案 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;
如果你需要在控制器中使用它,你可以注入$ filter然后使用:
var myFormattedAmount = $filter('currency')($scope.enteredBillAmountNumber);
&#13;