Мне было интересно, есть ли в angular способ условного отображения контента, кроме использования ng-show и т. Д. Например, в backbone.js я мог бы сделать что-то со встроенным контентом в шаблоне, например:
<% if (myVar === "two") { %> show this<% } %>
но в угловом я, кажется, ограничен показом и сокрытием вещей, завернутых в HTML-теги
<p ng-hide="true">I'm hidden</p>
<p ng-show="true">I'm shown</p>
Как рекомендуется использовать angular для условного отображения и скрытия встроенного содержимого в angular, просто используя {{}}, а не оборачивая содержимое в HTML-теги?
angularjs
if-statement
ternary-operator
user1469779
источник
источник
Ответы:
РЕДАКТИРОВАТЬ: 2Toad ответ ниже , что вы ищете! Поддержи эту вещь
Если вы используете Angular <= 1.1.4, тогда ответ будет таким:
Еще один ответ на это. Я публикую отдельный ответ, потому что это скорее «точная» попытка решения, чем список возможных решений:
Вот фильтр, который будет выполнять «немедленное if» (он же iif):
и может быть использовано так:
источник
В Angular 1.1.5 добавлена поддержка троичных операторов:
источник
myVar
только если оно ложно? (т.е. как я могу вкладывать переменные в выражение?) Я пытался,{{myVar === "two" ? "it's true" : {{myVar}}}}
но это не работает.myVar
свойство не нужно заключать в дополнительные фигурные скобки, оно уже внутри выражения. Попробуйте{{myVar === "two" ? "it's true" : myVar}}
Тысячи способов снять шкуру с этой кошки. Я понимаю, что вы спрашиваете между {{}} конкретно, но для других, которые приходят сюда, я думаю, что стоит показать некоторые другие варианты.
Функция в вашей области $ (IMO, это ваша лучшая ставка в большинстве сценариев):
нг-шоу и нг-скрыть, конечно:
ngSwitch
Пользовательский фильтр, как предложил Бертран. (это ваш лучший выбор, если вам придется делать одно и то же снова и снова)
Или пользовательская директива:
Лично в большинстве случаев я бы использовал функцию в своей области видимости, она содержала разметку довольно чисто, и ее легко и быстро реализовать. Если, конечно, вы не будете делать одно и то же точно снова и снова, и в этом случае я бы следовал предложению Бертранда и создавал фильтр или, возможно, директиву, в зависимости от обстоятельств.
Как всегда, самое важное - это то, что ваше решение легко обслуживается и, как мы надеемся, тестируемо. И это будет полностью зависеть от вашей конкретной ситуации.
источник
Я использую следующее, чтобы условно установить класс attr, когда ng-класс не может быть использован (например, при стилизации SVG):
Тот же подход должен работать для других типов атрибутов.
(Я думаю, что вы должны быть на последнем нестабильном Angular, чтобы использовать ng-attr-, я сейчас на 1.1.4)
Я опубликовал статью о работе с AngularJS + SVG, в которой говорится об этом и связанных с этим проблемах. http://www.codeproject.com/Articles/709340/Implementing-a-Flowchart-with-SVG-and-AngularJS
источник
Для проверки содержимого переменной и текста по умолчанию вы можете использовать:
источник
Если я вас хорошо понял, думаю, у вас есть два способа сделать это.
Сначала вы можете попробовать ngSwitch, а второй возможный способ - создать собственный фильтр . Возможно, ngSwitch - правильный подход, но если вы хотите скрыть или показать встроенный контент, используйте фильтр {{}}.
Вот в качестве примера скрипка с простым фильтром.
источник
Библиотека Angular UI имеет встроенную директиву ui-if для условия в шаблоне / Views до angular ui 1.1.4
Пример: поддержка в Angular UI до пользовательского интерфейса 1.1.4
нг-если доступно во всех угловых версиях после 1.1.4
если у вас есть какие-либо данные в переменной массива, то появится только div
источник
ui-if
был удален по крайней мере из последней версии angular-ui, но начиная с angular 1.1.5 у вас естьng-if
(из этого комментария )Таким образом, с Angular 1.5.1 (существующая зависимость приложения от некоторых других зависимостей стека MEAN, поэтому я в настоящее время не использую 1.6.4)
Это работает для меня как высказывание ОП
{{myVar === "two" ? "it's true" : "it's false"}}
источник
если вы хотите отобразить «None», когда значение равно «0», вы можете использовать как:
или правда ложь в угловых JS
источник
Работает даже в экзотических ситуациях:
источник
Я добавлю мой в смесь:
https://gist.github.com/btm1/6802312
это вычисляет оператор if один раз и не добавляет прослушивателя, но вы можете добавить дополнительный атрибут к элементу, который имеет set-if call wait-for = "somedata.prop", и он будет ждать, пока эти данные или свойство не будут установлены ранее оценивая оператор if один раз. этот дополнительный атрибут может быть очень полезен, если вы ожидаете данных из запроса XHR.
источник