【发布时间】:2018-03-26 21:19:57
【问题描述】:
我正在使用此线程中“最佳答案”中显示的货币过滤器:Apply currency filter to the input field in angularjs
问题是,我还需要输入字段只能是数字,即 type="number"。它与 type="text" 完美配合,但是当我尝试将两者结合时,当文本框失去焦点时输入消失。
<div class="table-cell">
<div class="field-label table-cell">Estimated Yearly<br />Savings</div>
<input ng-model="model.yearlySavings" type="number" format="currency">
</div>
JS:
mainModule.directive('format', ['$filter', function ($filter) {
return {
require: '?ngModel',
link: function (scope, elem, attrs, ctrl) {
if (!ctrl) return;
ctrl.$formatters.unshift(function (a) {
return $filter(attrs.format)(ctrl.$modelValue)
});
elem.bind('blur', function (event) {
var plainNumber = elem.val().replace(/[^\d|\-+|\.+]/g, '');
elem.val($filter(attrs.format)(plainNumber));
});
}
};
}]);
注意:我会在那个帖子中发表评论,但我没有足够的“代表”来发表评论......
【问题讨论】:
-
此过滤器将输入格式化为字符串。如果您将输入的类型更改为数字,您所说的是输入字段必须期望一个数字,但是通过应用此过滤器,您可以将该字段的值更改为一个字符串,该字符串不能转换为数字,因为它包含 $和 ','。您希望它是一个数字有什么特别的原因吗?
标签: angularjs input currency formatter