Angularjs 通过过滤器应用通用遮罩?
我目前正在使用ngMask来处理用户输入的屏蔽。它工作得很好,但至少只能用于Angularjs 通过过滤器应用通用遮罩?,angularjs,masking,Angularjs,Masking,我目前正在使用ngMask来处理用户输入的屏蔽。它工作得很好,但至少只能用于input元素。我现在需要屏蔽相同的数据以便显示。例如,在表中,我希望将item.ssn=123456789显示为123-45-6798 最好的方法是什么?我知道我可以定制过滤器,但我想知道是否有一个通用的方法来为所有文本这样做。像这样,如果你能扩展ngMask的功能 <td><span mask="999-99-9999">{{item.ssn}}</span></td>
input
元素。我现在需要屏蔽相同的数据以便显示。例如,在表中,我希望将item.ssn=123456789
显示为123-45-6798
最好的方法是什么?我知道我可以定制过滤器,但我想知道是否有一个通用的方法来为所有文本这样做。像这样,如果你能扩展ngMask的功能
<td><span mask="999-99-9999">{{item.ssn}}</span></td>
{{item.ssn}
或者作为一个过滤器
<td>{{item.ssn|filter:'999-99-9999'}}</td>
{{item.ssn |过滤器:'999-99-9999'}
看看过滤器。您几乎需要实现相同的功能,但是对于字符串。你可以参考一下
在最简单的情况下,您可以使用简单的正则表达式替换:
angular.module('myModule').filter('ssn', function() {
return function(text) {
return (""+text).replace(/(\d\d\d)(\d\d)(\d\d\d\d)/, '$1-$2-$3');
}
})
<td>{{item.ssn|ssn}}</td>
angular.module('myModule').filter('ssn',function(){
返回函数(文本){
返回(“+text”)。替换(/(\d\d\d)(\d\d)(\d\d\d\d)/,“$1-$2-$3”);
}
})
{{item.ssn | ssn}}
您需要实现一个过滤器。您可以依赖ngMask提供的MaskService
:
angular.module('myModule').filter('mask', ['MaskService', function(MaskService) {
return function(text, mask) {
var result,
maskService = MaskService.create(),
if (!angular.isObject(mask)) {
mask = { mask: mask }
}
maskService.generateRegex(mask).then(function() {
result = maskService.getViewValue(text).withDivisors()
}
return result;
}
}])
然后:
{{item.ssn |掩码:'999-99-9999'}
对我有用。跟着
{{'01234567890'|掩码:'999.999.999-99'}
//012.345.678-90只需使用AngularJS即可
{{youdate | date : "dd.MM.y"}}
参考资料:“想知道是否有一种通用的方法可以对所有文本执行此操作”您能给出一个使用示例以便我们清楚地了解吗?定制过滤器似乎是这里的最佳选择,但您可以使用
ngMask
中包含的MaskService
大大简化它。@Jasen:对不起。更新。@BroiSatse:你能给我举一个如何使用MaskService的例子吗?也许我还是不太明白。。。但是您可以将格式字符串传递到自定义筛选器函数(输入,格式)
,以便{input | filter:format}
我了解如何创建自定义筛选器。我的目标是做一些通用的东西。然后只需传入格式字符串函数(text,format)
这有很多错误,但即使如此,我也只能在删除承诺并使其返回函数(text,mask){var maskService=maskService.create();maskService.generateRegex({mask:mask});返回maskService.getViewValue(text).withDivisors();}
Promise几乎只用于处理无法创建正则表达式的情况,删除它应该是非常安全的。很抱歉给你打错了,可以随意修改。考虑用你所做的来解释你所得到的结果。请看:如果你可以扩展你的解释,这将是好的,因为只有链接的答案是真的皱眉头,如果链接打破了大部分你的答案是丢失
<span>{{'01234567890' | mask:'999.999.999-99'}}</span>
{{youdate | date : "dd.MM.y"}}