Возможны ли сложные выражения в ng-hide / ng-show?

180

Я хочу сделать так:

ng-hide="!globals.isAdmin && mapping.is_default"

но выражение всегда оценивает false.

Я не хочу определять специальную функцию на $scope.

Павел
источник
1
Этот синтаксис работает для меня, и я использую его часто. Если он оценивается false, вы можете дважды проверить эти значения. Возможно, что «глобальные» и / или «отображающие» объектыundefined
derrylwc
Прочитайте мой комментарий под ответом.
Пол
просто подсказка - если вы используете метод контроллера вместо этого, вы можете фактически выполнить оценку в отладчике!
Дмитрий К

Ответы:

212

Используйте метод контроллера, если вам нужно запустить произвольный код JavaScript, или вы можете определить фильтр, который возвращает true или false.

Я только что проверил (должен был сделать это первым), и что-то вроде ng-show="!a && b"сработало, как ожидалось.

Марк Райкок
источник
4
Ты прав. Проблема заключалась в том, что флаг isAdmin имел тип 'string', а не 'boolean'.
Paul
121

ng-show/ ng-hideпринимает только booleanзначения.

Для сложных выражений хорошо использовать контроллер и область видимости, чтобы избежать сложностей.

Ниже будет работать (это не очень сложное выражение)

ng-show="User=='admin' || User=='teacher'"

Здесь элемент будет показан в пользовательском интерфейсе, когда любое из двух условий вернет true (операция ИЛИ).

Таким образом, вы можете использовать любые выражения.

myaseedk
источник
12

Это будет работать, если у вас не слишком много выражений.

Пример: ng-show="form.type === 'Limited Company' || form.type === 'Limited Partnership'"

Для любых других выражений используйте контроллер.

lvadim01
источник
1
Я не думаю, что ваше утверждение верно: This will work if you do not have too many expressions.хотя я согласен, что это должно быть сделано вместо этого в контроллере.
Рахул Десаи
7

Обычно я стараюсь избегать выражений с помощью ng-show и ng-hide, поскольку они были заданы как логические, а не условные выражения. Если мне нужна как условная, так и логическая логика, я предпочитаю использовать условную логику, используя ng-if в качестве первой проверки, а затем добавить дополнительную проверку логической логики с помощью ng-show и ng-hide

Однако, если вы хотите использовать условное выражение для ng-show или ng-hide, вот ссылка с некоторыми примерами: Условное отображение с использованием ng-if, ng-show, ng-hide, ng-include, ng-switch

Джеймс Дринкард
источник
2

Некоторые из приведенных выше ответов не сработали для меня, но это сработало. На всякий случай, если у кого-то есть такая же проблема.

ng-show="column != 'vendorid' && column !='billingMonth'"
Deathstalker
источник