2016-04-25 43 views
0

我想使用ng-repeat遍历数组,并根据函数属性过滤包含的对象。 Plunker按功能过滤ng - 重复

这意味着我有一个这样的对象:

vm.show1 = function(){ 
    return true; 
};  
var object1 = {label: 'Object1', show: vm.show1}; 

,并希望对其进行过滤是这样的:

<div ng-repeat="object in ctrl.objects | filter:{show:true}">{{object.label}}</div> 

显然,在上面的例子中vm.show1是一个函数(并且因此不等于true)。有没有办法让过滤器调用函数并评估结果,还是必须编写自定义过滤器?

编辑:这甚至可能吗?如果角度不处理脏框检查,则过滤器无法知道何时需要重新评估函数。

+0

所以你要对每个对象上执行一个功能,看它是否应该是可见或不可见? –

+0

是的,基本上就是这样。我想在一个函数中放置(或多或少)复杂的语句,并使得重复查找该函数的结果。生成的视图应该与我手动列出元素并将每个元素包装到具有这种函数的ng-if块中相同。 –

+0

那么为什么不使用'ng-if'呢? '$ scope'问题? –

回答

1

我认为这样做是与自定义过滤器功能的最佳方式:

$scope.filterFn = function(object) 
{ 
    //if true, rendered in ng-repeat 
    //if false, not rendered in ng-repeat 
    return object.show1(); 
}; 

<div ng-repeat="object in ctrl.objects | filter:filterFn">