Quiero hacer una condición en una plantilla AngularJS. Busco una lista de videos de la API de Youtube. Algunos de los videos tienen una relación de 16: 9 y algunos tienen una relación de 4: 3.
Quiero hacer una condición como esta:
if video.yt$aspectRatio equals widescreen then
element's attr height="270px"
else
element's attr height="360px"
Estoy iterando los videos usando ng-repeat
. No tengo idea de qué debo hacer para esta condición:
- Agregar una función en el alcance?
- ¿Hacerlo en plantilla?
if-statement
angularjs
vzhen
fuente
fuente
Respuestas:
Angularjs (versiones inferiores a 1.1.5) no proporciona la
if/else
funcionalidad. Las siguientes son algunas opciones a considerar para lo que desea lograr:( Vaya a la actualización a continuación (# 5) si está utilizando la versión 1.1.5 o superior )
1. Operador ternario:
Según lo sugerido por @Kirk en los comentarios, la forma más limpia de hacerlo sería utilizar un operador ternario de la siguiente manera:
2.
ng-switch
directiva:se puede usar algo como lo siguiente.
3.
ng-hide
/ng-show
directivasAlternativamente, también puede usarlo,
ng-show/ng-hide
pero usarlo en realidad representará un video grande y un elemento de video pequeño y luego ocultará el que cumpla lang-hide
condición y muestre el que cumpla lang-show
condición. Entonces, en cada página, realmente representará dos elementos diferentes.4. Otra opción a considerar es la
ng-class
directiva.Esto se puede usar de la siguiente manera.
Lo anterior básicamente agregará una
large-video
clase css al elemento div sivideo.large
es verdadero.ACTUALIZACIÓN: Angular 1.1.5 introdujo el
ngIf directive
5.
ng-if
directiva:En las versiones anteriores
1.1.5
, puede usar lang-if
directiva. Esto eliminaría el elemento si la expresión proporcionada regresafalse
y se vuelve a insertarelement
en el DOM si la expresión regresatrue
. Se puede usar de la siguiente manera.fuente
ng-switch on="video"
en su lugarng-switch-on="video"
<span>{{isAdded ? 'Added' : 'Add to cart'}}</span>
ng-if
NO agregará los elementos encerrados al DOM hasta que su condición evalúetrue
, a diferencia deng-hide
yng-show
.ng-switch="video"
? ¿Algún problema? o no estaba disponible antes? Para mí está funcionando bastante bienEn la última versión de Angular (a partir de 1.1.5), han incluido una directiva condicional llamada
ngIf
. Es diferente dengShow
yngHide
en que los elementos no están ocultos, pero no están incluidos en el DOM. Son muy útiles para componentes que son costosos de crear pero que no se usan:fuente
ng-if
introduce un alcance aislado , por lo que se$parent
convierte$parent.$parent
en el cuerpo deng-if
.Ternary es la forma más clara de hacerlo.
fuente
Angular en sí no proporciona la funcionalidad if / else, pero puede obtenerla al incluir este módulo:
https://github.com/zachsnow/ng-elif
En sus propias palabras, es solo "una simple colección de directivas de flujo de control: ng-if, ng-else-if y ng-else". Es fácil e intuitivo de usar.
Ejemplo:
fuente
ng-if="someCondition && someOtherCondition"
. Tal vez no entiendo? (Escribí ese módulo, debería funcionar igualif
yelse
en JS).Puede usar su
video.yt$aspectRatio
propiedad directamente pasándola a través de un filtro y vinculando el resultado al atributo de altura en su plantilla.Su filtro se vería así:
Y la plantilla sería:
fuente
video.yt$aspectRatio
está vacío o indefinido? ¿Es posible aplicar un valor predeterminado?En este caso, desea "calcular" un valor de píxel según la propiedad de un objeto.
Definiría una función en el controlador que calcula los valores de píxeles.
En el controlador:
Luego, en su plantilla, simplemente escriba:
fuente
Estoy de acuerdo en que un ternario es extremadamente limpio. Parece que es muy situacional, aunque como algo necesito mostrar div o p o table, por lo que con una tabla no prefiero un ternario por razones obvias. Hacer una llamada a una función suele ser ideal o, en mi caso, hice esto:
fuente
puede usar la directiva ng-if como se indicó anteriormente.
fuente
Una posibilidad para Angular: tuve que incluir una declaración if en la parte html, tuve que verificar si todas las variables de una URL que produzco están definidas. Lo hice de la siguiente manera y parece ser un enfoque flexible. Espero que sea útil para alguien.
La parte html en la plantilla:
Y la parte mecanografiada:
Gracias y un saludo,
ene
fuente
ng Si otra declaración
fuente