Angularjs 通过过滤器应用通用遮罩?

Angularjs 通过过滤器应用通用遮罩?,angularjs,masking,Angularjs,Masking,我目前正在使用ngMask来处理用户输入的屏蔽。它工作得很好,但至少只能用于input元素。我现在需要屏蔽相同的数据以便显示。例如,在表中,我希望将item.ssn=123456789显示为123-45-6798 最好的方法是什么?我知道我可以定制过滤器,但我想知道是否有一个通用的方法来为所有文本这样做。像这样,如果你能扩展ngMask的功能 <td><span mask="999-99-9999">{{item.ssn}}</span></td>

我目前正在使用ngMask来处理用户输入的屏蔽。它工作得很好,但至少只能用于
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"}}