我有一个输入表单,可以输入数百、数百万、数十亿等的货币值。为了方便用户使用,我希望显示这些自定义输入字段并让用户输入例如“1.5M”而不是 1500000、“1B” ' 而不是 1000000000 等等。为此目的,我创建了一个FormatServices
服务有两个方法currParse(value: string): number
,并currFormat(value: number): string
和他们做什么,他们都应该即模型,显示值与背面之间变换。
现在我定义一个自定义货币指令如下:
.directive("currency", function($filter, formatServices: FormatServices){
// convert to number
var p = function(viewValue){
if (angular.isDefined(viewValue)) {
return $filter('number')(formatServices.currParse(viewValue));
}
};
var f = function(modelValue){
if (angular.isDefined(modelValue)) {
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< HERE WHAT FILTER TYPE?
return $filter('???')(formatServices.currFormat(modelValue));
}
};
return {
require: 'ngModel',
link: function(scope, ele, attr, ctrl){
ctrl.$parsers.unshift(p);
ctrl.$formatters.unshift(f);
}
};
})
在注释行中,我需要一个过滤器类型。查看我尝试使用的Ng 中可用的过滤器类型number
但不起作用,因为它是一个字符串输出。json
过滤器类型有效,但输出包括双引号。uppercase
并且lowercase
不工作,因为它们破坏了我的格式,例如我可以拥有 100k 或 1.5M。没有text
过滤器所以我不知道在那里填写什么才能让这个工作......
您可以制作自己的过滤器。此示例创建一个 IntegerCurrency。
.filter('myCurrency', ['$filter', function ($filter) {
return function(input) {
input = parseFloat(input);
if(input % 1 === 0) {
input = input.toFixed(0);
}
return '$' + input;
//you can change $ or € put ',' '.' '-' or decorate whate ever the output.
};
}])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句