通过过滤器应用通用掩码?

时间:2015-08-03 18:06:32

标签: angularjs masking

我目前正在使用ngMask来处理用户输入的屏蔽。它工作得很好,但是,AFAIK只能在 $( ".selector" ).tabs({ active: 1 }); 元素上使用。我现在需要屏蔽相同的数据进行显示。例如,在表格中,我希望将input显示为item.ssn = 123456789

最好的方法是什么?我知道我可以制作自定义过滤器,但是想知道是否有通用的方法来为所有文本执行此操作。如果你可以扩展ngMask功能......就像这样......

123-45-6798

或作为过滤器......

<td><span mask="999-99-9999">{{item.ssn}}</span></td>

4 个答案:

答案 0 :(得分:1)

查看date过滤器。你几乎需要实现相同的但是对于字符串。您可以使用source code作为参考。

在最简单的情况下,您可以使用简单的正则表达式替换:

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>

答案 1 :(得分:1)

您需要实施过滤器。您可以依赖于ngMask提供的recv()

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;
  }
}])

答案 2 :(得分:1)

适合我。关注。

https://github.com/alairjt/displayMask

<span>{{'01234567890' | mask:'999.999.999-99'}}</span>

// 012.345.678-90

答案 3 :(得分:-1)

只需使用AngularJS

{{youdate | date : "dd.MM.y"}}

参考:https://docs.angularjs.org/api/ng/filter/date