【问题标题】:How to clear the filter in a select element in Angular?如何清除Angular中选择元素中的过滤器?
【发布时间】:2015-03-30 22:21:30
【问题描述】:

我有以下 HTML:

<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”,并将元素作为“实际”传入。所以我们说,如果预期或“markSearch”为空,则匹配所有元素(返回真)。否则,执行“严格”对象比较

【问题讨论】:

  • 你能放个 jsfiddle 或 plunk
  • 当它是:... filter:markSearch.mark.id"&gt; 时会发生什么?

标签: javascript angularjs


【解决方案1】:

您可以实现自己的比较器功能。

我 fork 你的 plunk here 应该可以正常工作。

基本上,您应该向filter : expression : comparatorFnthis 函数添加一个参数,该函数应该在您的控制器范围内可用。

更新:记得查看angular docs for filter

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 2012-07-03
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多