2017-06-14 47 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> 

希望它有帮助。