小编典典

使角度过滤器成为条件

angularjs

我目前正在使用文本输入来过滤项目列表。我想这样做,以便在设置特定变量时,无论文本输入是什么,列表都不会过滤。关于如何实现此目标的任何建议?

<a ng-repeat="set in data | filter: { value: search }" data-id="{{set.id}}" ng-mousedown="setBox(set)" ng-mouseover="setSelected(set, $event)" ng-bind-html="set.value | trustHTML"></a>

阅读 331

收藏
2020-07-04

共1个答案

小编典典

如果将过滤器表达式设置为''(或undefined)(这会导致不应用过滤器)(disableFilter设置您的时间),否则将其设置为实际过滤器表达式,则可以实现此目的。

编辑2
:另一个答案(@Ryan下面)更简单易懂。现在不记得它最初是否对我不起作用,或者我只是没有想到这种简单的方法。

因此,假设此切换变量disableFilter--是布尔值:

<a ng-repeat="set in data | filter: (!disableFilter || '') && filterExpression">

(可以filterExpression是您要过滤的任何表达式)。您的具体情况是:

<a ng-repeat="set in data | filter: (!disableFilter || '') && {value: search}">

编辑:

解释上面的工作原理。

  1. 记住这一点,||&&返回其操作数之一的值。
  2. ||&&使用短路评估- true || (anything)收益truefalse && (anything)返回false-不评估(anything)表达式。
  3. ''是虚假的(或者undefined,如果更清楚,请改用)

所以,

disableFilter === true,时!disableFilter === false,则对第二个操作数||-空字符串''-进行求值(是虚假的),并(!disableFilter || '')返回''-虚假的值,该值会使&&操作短路,并且不对的第二个操作数求值&&。因此,表达式的返回值为''

disableFilter === false!disableFilter === true短路||操作时,将&&评估并返回的第二个操作数。因此,表达式的返回值为{value: search}

在此处阅读有关逻辑运算符的更多信息

2020-07-04