2015-03-30 56 views
0

我有以下HTML:如何清除Angular中select元素中的過濾器?

<select ng-options="mark.id as mark.name for mark in marks" ng-model="markSearch.mark.id"> 
    <option value="">-- Choose mark --</option> 
</select> 
... 
<tr ng-repeat-start="pipeType in pipeTypes | filter:markSearch"> 

我想篩選基於該商標所選擇的選項我pipeType對象。每個pipeType對象都有一個由兩個字段組成的標記對象 - id和name。我希望能夠在選擇「 - 選擇標記 - 」選項時清除過濾器。但是,當我點擊「 - 選擇標記 - 」選項時,沒有任何pipeType對象可見。我想要在發生這種情況時可視化所有對象。我應該在我的代碼中更改什麼?

編輯: 這裏是一個plunk

編輯2: 我已經接受Matho的答案,它的工作原理。以防萬一別人想知道爲什麼它的工作原理,我想這個簡短的解釋(來自this answer評論)將清除你的想法。

對於數組中的每個元素,Angular將調用比較函數並按預期傳入「markSearch」,並將元素傳遞爲「actual」。所以我們說,如果期望的或「markSearch」是空的,那麼匹配ALL元素(返回true)。否則,執行「嚴格」對象比較

+0

你可以搭起一個jsfiddle或plunk – 2015-03-30 22:36:19

+0

當它是:'... filter:markSearch.mark.id「>'? – Tony 2015-03-30 22:47:42

+0

我加了一個plunk – Yulian 2015-03-30 23:27:23

回答

2

您可以實現自己的比較器功能。

我分叉您的plunk here應該工作得很好。

基本上你應該添加一個參數到filter : expression : comparatorFn這個功能應該可以在你的控制器的範圍內使用。

更新:記得檢查angular docs for filter