2016-04-25 77 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">