2014-11-25 49 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