Вы можете добиться этого, если вы установите выражение фильтра на ''
(или undefined
) - это приводит к тому, что фильтр не применяется - если установлено значение disableFilter
или иное выражение фильтра.
Таким образом, если предположить, это переключая переменная - disableFilter
- это логическое значение:
<a ng-repeat="set in data | filter: (!disableFilter || '') && filterExpression">
(с filterExpression
быть все, что выражение вы хотите фильтровать). Ваш конкретный случай будет:
<a ng-repeat="set in data | filter: (!disableFilter || '') && {value: search}">
EDIT:
Чтобы объяснить, как вышеуказанные работы.
- Помните, что
||
и &&
возвращают значение одного из операндов.
||
и &&
использование оценка короткого замыкания - true || (anything)
возвращение true
; false && (anything)
false
- не оценивая выражение (anything)
.
''
является falsy (или использовать undefined
вместо этого, если это понятнее)
И так,
когда disableFilter === true
, !disableFilter === false
, таким образом, второй операнд ||
- пустая строка ''
- вычисляется (это falsy), и (!disableFilter || '')
возвращает ''
- значение ложности, которое замыкает замыкание на &&
и не оценивает второй операнд &&
. Таким образом, возвращаемое значение выражения равно ''
.
, когда disableFilter === false
, !disableFilter === true
, который замыкает замыкание на ||
, затем оценивается и возвращается второй операнд &&
. Возвращаемым значением выражения является, таким образом, {value: search}
.
Подробнее о logical operators here
возможно дубликат [условно применять фильтры с нг-повтора] (HTTP: //stackoverflow.com/questions/17206062/condition-apply-filters-with-ng-repeat) – Aaron
Я предполагаю, что это может быть дубликат ... хотя я не могу сказать, что я доволен предоставленным ответом :) – RhoVisions