2014-11-25 46 views
2

我试图实现自己的过滤器,我发现这个工作示例http://jsfiddle.net/TahmidTanzim/N9Vqk/Angular - 自定义过滤器如何真正起作用?

但我不明白几件事情:在下面的代码,它从何而来的clients

1)数组?我看到$scope.clients场,但我不能看到它是如何被注入过滤功能

angular.module('App.filters', []).filter('companyFilter', [function() { 
     return function (clients, selectedCompany) { ..... 

2)什么是filtered里面?它只是()内的过滤clients的名称/别名?

<tr data-ng-repeat="client in filtered = (clients | companyFilter:selectedCompany)"> 

3)I假设下面的函数是自定义过滤器,但过滤器预计clients阵列和一些ID,但作用不匹配标准。

_.contains($scope.selectedCompany, id) 
_.without($scope.selectedCompany, id) 
_.pluck($scope.companyList, 'id') 

回答

1

筛选器将它应用到作为第一个参数,所以当你做的“水木清华|过滤器”,不便将作为第一个参数传递给过滤器,第二个参数是你后添加的是什么“:”,例如:“smth | filter:params”。 而过滤函数返回实际的过滤结果。

因此,在这种情况下:

<tr data-ng-repeat="client in filtered = (clients | companyFilter:selectedCompany)"> 

过滤器将采取一系列“客户”与参数“selectedCompany”,返回数组的女巫将被传递到NG-重复。

+0

谢谢 - 但是如果我想将更多参数添加到我的过滤器呢? – Tony 2014-11-25 10:32:41

+1

hm。作为文档说只有一个参数和2个选项:https://docs.angularjs.org/api/ng/filter/filter 所以你可以在这里使用几种方法,具体取决于你需要什么: - 用singleton创建一个服务,将它作为依赖注入到过滤器中,并通过它传递参数。 - 创建多个过滤器并链接它们,如下所示:ng-repeat =“item in items =(smthing | filter1:param1 | filter2:param2 | ..)” - 所以在控制器中有些东西。 – Rasalom 2014-11-25 10:45:10