如何逃避'!'当调用angularjs过滤器时

时间:2015-08-12 02:17:57

标签: angularjs filter

AngularJS过滤器保护了一些特殊的字符。通过在字符串前加!前缀可以否定谓词,但现在我想过滤掉包含'!'的项目。特别的。我怎么能逃脱这个特殊的角色'!'请?

1 个答案:

答案 0 :(得分:3)

你无法逃避它,因为filter过滤了doesn't presume it

但您可以使用predicate function覆盖!谓词的默认行为并装饰filter而不会破坏任何其他内容。

app.config(['$provide', function ($provide) {
  function bang(value) {
    return value.indexOf('!') >= 0;
  };

  function bangless(value) {
    return value.indexOf('!') < 0;
  };

  $provide.decorator('filterFilter', ['$delegate', function ($delegate) {
    return function (array, expression, comparator) {
      if (expression === '!') {
        expression = bang;
      } else if (expression === '!!') {
        expression = bangless;
      }

      return $delegate(array, expression, comparator);
    }
  }]);
}]);