从ng-repeat过滤器中剥离字符?

时间:2016-10-03 04:17:16

标签: angularjs

我正在编写一个Angular应用程序,它将从USB设备读取磁条卡。当我刷一张测试卡时,我得到一个包含卡号的字符串。例如,;12345?,其中12345是卡号。

我的应用使用的数据不包含这些“控制字符”,因此如果字符串以;开头并以{{1}结尾,我想将它们从搜索字符串中删除}。

当我编写自定义过滤器时:

?

失败是因为我angular.module('app.filters', []) .filter('stripcardcontrolcharacters', function() { return function(text) { if(text.substring(0, 1) === ";" && text.substring(text.length - 1) === "?") { return text.substring(1, text.length - 1); } }; }); 在数组上,而不是我搜索过的字符串。

我如何获取我正在过滤的字符串并从中删除字符?

编辑:目前的建议是使用过滤器在控制字符中将数组修改为ADD,以便ng-repeat可以找到它。我现在可能会继续使用它,但我仍然很想知道你是否可以编写这样的过滤器

2 个答案:

答案 0 :(得分:0)

您已通过

将整个数组传递到过滤器
ng-repeat="user in users | stripcardcontrolcharacters ...

如果您希望它如何工作,您需要将其视为数组,例如

return function(textArray) {
    var invalidChars = /\D/g; // just an example
    return textArray.map(text => {
        console.log(text);
        return text.replace(invalidChars, '');
    });
}

答案 1 :(得分:0)

您可能正在将过滤器应用于数组,而不是字符串本身。 看看这个例子:

angular.module('test', [])
  .controller('testController', function($scope){
    $scope.names = ['John Doe', 'Jane Doe'];
  })
  // The test filter
  .filter('strip', function(){
    return function(str) {
      return str.substring(1, str.length - 1);
    };
  });

以下是如何使用它:

<body ng-app="test" ng-controller="testController">
    <p ng-repeat="name in names">
        {{name | strip }}
    </p>
</body>

请注意,我在使用值的过滤器中应用了过滤器,而不是ng-repeat语句中的过滤器。

And here is the working plunker