Я хочу сделать условие в шаблоне AngularJS. Я получаю список видео из YouTube API. Некоторые видео имеют соотношение 16: 9, а некоторые - 4: 3.
Я хочу сделать условие, как это:
if video.yt$aspectRatio equals widescreen then
element's attr height="270px"
else
element's attr height="360px"
Я перебираю видео используя ng-repeat
. Понятия не имею, что мне делать для этого условия:
- Добавить функцию в область?
- Сделать это в шаблоне?
if-statement
angularjs
vzhen
источник
источник
Ответы:
Angularjs (версии ниже 1.1.5) не обеспечивает
if/else
функциональность. Ниже приведены несколько вариантов, которые вы можете рассмотреть:( Перейти к обновлению ниже (# 5), если вы используете версию 1.1.5 или выше )
1. Тернарный оператор:
Как предложено @Kirk в комментариях, самый простой способ сделать это - использовать троичный оператор следующим образом:
2.
ng-switch
директива:может быть использовано что-то вроде следующего.
3.
ng-hide
/ng-show
директивыВ качестве альтернативы вы также можете использовать,
ng-show/ng-hide
но, используя это, вы фактически отрендерите и большое видео, и маленький видеоэлемент, а затем скроете тот, который соответствуетng-hide
условию, и покажет тот, который соответствуетng-show
условию. Таким образом, на каждой странице вы будете отображать два разных элемента.4. Другим вариантом для рассмотрения является
ng-class
директива.Это можно использовать следующим образом.
Вышесказанное в основном добавит
large-video
класс css к элементу div, еслиvideo.large
это правда.ОБНОВЛЕНИЕ: Angular 1.1.5 представил
ngIf directive
5.
ng-if
директива:В версиях выше
1.1.5
вы можете использоватьng-if
директиву. Это удалит элемент, если возвращенное выражение вернет,false
и повторно вставитelement
в DOM, если выражение вернетсяtrue
. Можно использовать следующим образом.источник
ng-switch on="video"
вместоng-switch-on="video"
<span>{{isAdded ? 'Added' : 'Add to cart'}}</span>
ng-if
НЕ будет добавлять вложенные элементы в DOM, пока его состояние не будет оцененоtrue
, в отличие отng-hide
иng-show
.ng-switch="video"
? Небольшая проблема? или это было недоступно ранее? Для меня это работает вполне нормальноВ последней версии Angular (по состоянию на 1.1.5) они включили условную директиву под названием
ngIf
. Он отличается отngShow
иngHide
в том , что элементы не скрыты, но не включены в DOM вообще. Они очень полезны для компонентов, которые стоят дорого, но не используются:источник
ng-if
вводит изолированную область , так что$parent
становится$parent.$parent
в телеng-if
.Тройной путь - самый ясный способ сделать это.
источник
Сам Angular не предоставляет функциональность if / else, но вы можете получить ее, включив этот модуль:
https://github.com/zachsnow/ng-elif
По его словам, это просто «простая коллекция директив потока управления: ng-if, ng-else-if и ng-else». Это простой и интуитивно понятный в использовании.
Пример:
источник
ng-if="someCondition && someOtherCondition"
. Возможно, я неправильно понимаю? (Я написал этот модуль - он должен работать так же, какif
иelse
в JS).Вы можете использовать свое
video.yt$aspectRatio
свойство напрямую, пропустив его через фильтр и связав результат с атрибутом высоты в вашем шаблоне.Ваш фильтр будет выглядеть примерно так:
И шаблон будет:
источник
video.yt$aspectRatio
он пуст или не определен? Можно ли применить значение по умолчанию?В этом случае вы хотите «вычислить» значение пикселя в зависимости от свойства объекта.
Я бы определил функцию в контроллере, которая вычисляет значения пикселей.
В контроллере:
Тогда в вашем шаблоне вы просто пишете:
источник
Я согласен, что троичный очень чист. Кажется, что это очень ситуативно, хотя в некоторых случаях мне нужно отображать div или p или таблицу, поэтому с таблицей я не предпочитаю троичную по очевидным причинам. Выполнение вызова функции обычно идеально, или в моем случае я сделал это:
источник
Вы можете использовать директиву ng-if, как указано выше.
источник
Возможность для Angular: мне нужно было включить оператор if - в html-часть, я должен был проверить, определены ли все переменные URL, который я создаю. Я сделал это следующим образом, и это, кажется, гибкий подход. Я надеюсь, что это будет полезно для кого-то.
HTML часть в шаблоне:
И машинописная часть:
Спасибо и всего наилучшего,
январь
источник
нг Если еще заявление
источник