2017-06-14 54 views
1

我有一些角色代碼,我正在使用並希望很快重構。
我想通過基於複選框的ng-repeat進行過濾。使用過濾器更新ng-repeat

我有一個數據樹,看起來是這樣的...

{ 
    name: 'mail', 
    rating: 2.4, 
    source: 'EDD', 
    users: 1000, 
    description: '' 
} 

ng-repeat工作是建立通過

<li ng-repeat="rule in property">{{rule[entityPropertyName]}</li> 

遍歷該物業更名爲關閉時存在的產品服務在搜索控制器像這樣

HTML

<search-section productName="qualifier" 
       product="qualifiers" 
       entityPropertyName="name"></search-section> 

指令

controller: 'searchController', 
scope: { 
    product: '=', 
    productName: '@', 
    entityPropertyName: '@' 
}, 

我通過複選框過濾用一個簡單的功能在控制器

$scope.filterAdded = function(sourceName) { 
    if($scope.filteredQualifiers.sourceName[sourceName]) { 
     return sourceName; 
    } 
} // returns source name 

源名返回前:媒體,或年齡

我希望我可以添加

$scope.filterAdded 

ng-repeat迭代器,像這樣

<li ng-repeat="rule in property | filter: filterAdded">{{rule[entityPropertyName]}</li> 

這個過濾器會從該指令的支持,像這樣

scope: { 
    entities: '=', 
    entityName: '@', 
    entityPropertyName: '@', 
    filterAdded: '&' 
}, 

隨着filterAdded被視爲一種功能。

帶過濾器添加像返回一個值EDD

我確定了我,我需要通過規則源進行過濾。

source: 'EDD' 

沒有看到的方式,我可以比較得到rule.source和filterAdded值。

<li ng-repeat="rule in property | filter: filterAdded"></li> 

任何洞察力或反饋意見讚賞。

回答

-1

我進入Angular 4,所以我會使用這種語言,但你可以適應角js(1.x)。

如果我得到了正確的結果,將ngIng或ngRepeat與ngIf而不是使用管道。

<ul *ngFor=" let rule in property"> 

*注意ngFor將用於ul,而不是li。

然後,在li標籤上,我將使用ngIf來檢查它是否在某個過濾器下。在ng上如果你可以綁定到一個函數,甚至可以傳遞你正在迭代的對象或者數組項目的屬性:

<li *ngIf="isThisOnFilter(rule['rating'])">{{ rule['name'] }}</li> 

希望它有幫助。