2015-05-12 25 views
1

我不知道如何編寫這個過濾器表達式。AngularJS ng-repeat和切換過濾器開啓/關閉?

我的文檔的數組:

[{title: 'doc1', read: false} 
{title: 'doc2', read: false} 
{title: 'doc3', read: false} 
{title: 'doc4', read: true} 
{title: 'doc5', read: false}] 

在視圖我有

<input type="checkbox" ng-model="filterRead"> 
<div ng-repeat="doc in documents track by $index | filter: ??? "> 
    {{doc.title}} 
</div> 

如果該複選框/ filterRead是真實的,不分配過濾器並顯示所有文件。如果複選框爲false,則只顯示doc.read = false的文檔。我不知道如何優雅地編寫這個過濾器表達式。

+2

可能重複的[製作的角過濾條件](http://stackoverflow.com/questions/29738014/making-an-angular-filter-conditional) –

回答

0

按照你的邏輯,你並不需要一個過濾器,你可以使用一個NG-IF:

控制器(或者,如果你想擁有筆直的邏輯在HTML)

$scope.showDoc = function() { 
    return $scope.filterRead || !doc.read; 
} 

和HTML:

<div ng-repeat="doc in documents track by $index" ng-if="showDoc()"> 
    {{doc.title}} 
</div> 
0

有可能只是做模板。這裏是一個例子:

<input type="checkbox" ng-model="filterRead.read" ng-true-value="false" ng-false-value="'!null'"> 
<div ng-repeat="doc in documents | filter:filterRead track by $index "> 
    {{doc.title}} 
</div> 

ngFalseValue指令在這裏做的伎倆。當未選中複選框時,filterRead.read型號設置爲不等於read true或false。因此,所有記錄都會被渲染。

演示:的http://plnkr.co/edit/GO9vAZI3ghZuFb2eqa6h?p=preview