我能让一个由多个过滤器组成的angularJS过滤器吗?

Can I make an angularJS filter composed of multiple filters?

本文关键字:过滤器 angularJS 一个      更新时间:2023-09-26

我试图通过从我的过滤器声明中返回具有方法的object literal来制作参数化过滤器。也就是说,我希望能够做{{ input | myFilter.foo | myFilter.bar }},等等……换句话说,我试图命名空间我的过滤器。

我希望它能正常工作,但我得到的错误如下:

未知提供者:myFilter。fooFilterProvider <- myFilter.fooFilter

我知道我可以将信息传递给像{{ input | filter:foo }}这样的过滤器,但据我所知,这只适用于字符串(?),我必须在此值上切换,而不仅仅是能够直接返回带有方法的对象文字。

处理如下示例的最佳方法是什么?(恰好演示)

angular.module('plunker', [])
.filter('greet', function() {
    var greetFactory = function(prefix) {
      return function(name) {
        return prefix + name + '!'
      }
    }
    return {
      hello: greetFactory('Hello'),
      wassup: greetFactory('Wassup'),
      yo: greetFactory('Yo!')
    }
});

<p>{{"Zach" | greet.hello}} // should output: Hello Zach!</p>
<p>{{"Bill" | greet.yo}}    // should output: Yo Bill!</p>
<p>{{"Bob" | greet.wassup}} // should output: Wassup Bob!</p>

是的,您可以在您的过滤器中添加其他过滤器作为依赖项,例如

app.filter('myFilter', ['greetFilter', function(greetFilter){
}])

注意,你必须在你想要注入的过滤器名称的末尾添加"Filter"。然后,您可以使用这些过滤器来构建自己的过滤器。