我目前正在使用文本输入来过滤项目列表。我想这样做,以便在设置特定变量时,无论文本输入是什么,列表都不会过滤。关于如何实现此目标的任何建议?
<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>
如果将过滤器表达式设置为''(或undefined)(这会导致不应用过滤器)(disableFilter设置您的时间),否则将其设置为实际过滤器表达式,则可以实现此目的。
''
undefined
disableFilter
编辑2 :另一个答案(@Ryan下面)更简单易懂。现在不记得它最初是否对我不起作用,或者我只是没有想到这种简单的方法。
因此,假设此切换变量disableFilter--是布尔值:
<a ng-repeat="set in data | filter: (!disableFilter || '') && filterExpression">
(可以filterExpression是您要过滤的任何表达式)。您的具体情况是:
filterExpression
<a ng-repeat="set in data | filter: (!disableFilter || '') && {value: search}">
编辑:
解释上面的工作原理。
||
&&
true || (anything)
true
false && (anything)
false
(anything)
所以,
当disableFilter === true,时!disableFilter === false,则对第二个操作数||-空字符串''-进行求值(是虚假的),并(!disableFilter || '')返回''-虚假的值,该值会使&&操作短路,并且不对的第二个操作数求值&&。因此,表达式的返回值为''。
disableFilter === true
!disableFilter === false
(!disableFilter || '')
当disableFilter === false,!disableFilter === true短路||操作时,将&&评估并返回的第二个操作数。因此,表达式的返回值为{value: search}。
disableFilter === false
!disableFilter === true
{value: search}
在此处阅读有关逻辑运算符的更多信息