2015-03-30 61 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