Je veux faire une condition dans un modèle AngularJS. Je récupère une liste de vidéos depuis l'API Youtube. Certaines vidéos sont au format 16: 9 et d'autres au format 4: 3.
Je veux faire une condition comme ça:
if video.yt$aspectRatio equals widescreen then
element's attr height="270px"
else
element's attr height="360px"
J'itère les vidéos en utilisant ng-repeat
. Je n'ai aucune idée de ce que je dois faire pour cette condition:
- Ajouter une fonction dans la portée?
- Faites-le dans le modèle?
if-statement
angularjs
vzhen
la source
la source
Réponses:
Angularjs (versions inférieures à 1.1.5) ne fournit pas la
if/else
fonctionnalité. Voici quelques options à considérer pour ce que vous voulez réaliser:( Passez à la mise à jour ci-dessous (# 5) si vous utilisez la version 1.1.5 ou supérieure )
1. Opérateur ternaire:
Comme suggéré par @Kirk dans les commentaires, la façon la plus propre de le faire serait d'utiliser un opérateur ternaire comme suit:
2.
ng-switch
directive:peut être utilisé quelque chose comme ce qui suit.
3.
ng-hide
/ng-show
directivesAlternativement, vous pouvez également utiliser,
ng-show/ng-hide
mais son utilisation rendra à la fois une grande vidéo et un petit élément vidéo, puis masquera celle qui remplit lang-hide
condition et affiche celle qui remplit lang-show
condition. Donc, sur chaque page, vous allez réellement afficher deux éléments différents.4. Une autre option à considérer est la
ng-class
directive.Cela peut être utilisé comme suit.
Ce qui précède ajoutera essentiellement une
large-video
classe css à l'élément div s'ilvideo.large
est véridique.MISE À JOUR: Angular 1.1.5 a introduit le
ngIf directive
5.
ng-if
directive:Dans les versions ci-dessus,
1.1.5
vous pouvez utiliser lang-if
directive. Cela supprimerait l'élément si l'expression fournie retournefalse
et réinsère leelement
dans le DOM si l'expression revienttrue
. Peut être utilisé comme suit.la source
ng-switch on="video"
placeng-switch-on="video"
<span>{{isAdded ? 'Added' : 'Add to cart'}}</span>
ng-if
cela n'ajoutera PAS les éléments joints au DOM jusqu'à ce que sa condition soit évaluée àtrue
, contrairement àng-hide
etng-show
.ng-switch="video"
? Quelques problèmes? ou il n'était pas disponible plus tôt? Pour moi ça marche très bienDans la dernière version d'Angular (à partir du 1.1.5), ils ont inclus une directive conditionnelle appelée
ngIf
. Il est différentngShow
etngHide
en ce sens que les éléments ne sont pas cachés, mais pas du tout inclus dans le DOM. Ils sont très utiles pour les composants dont la création est coûteuse mais qui ne sont pas utilisés:la source
ng-if
introduit une portée isolée , de sorte que cela$parent
devient$parent.$parent
dans le corps deng-if
.Ternary est le moyen le plus clair de le faire.
la source
Angular lui-même ne fournit pas de fonctionnalité if / else, mais vous pouvez l'obtenir en incluant ce module:
https://github.com/zachsnow/ng-elif
Dans ses propres mots, c'est juste "une simple collection de directives de flux de contrôle: ng-if, ng-else-if et ng-else". C'est simple et intuitif à utiliser.
Exemple:
la source
ng-if="someCondition && someOtherCondition"
. Peut-être que je me méprends? (Je l' ai écrit ce module - il devrait fonctionner commeif
etelse
à JS).Vous pouvez utiliser votre
video.yt$aspectRatio
propriété directement en la passant dans un filtre et en liant le résultat à l'attribut height de votre modèle.Votre filtre ressemblerait à quelque chose comme:
Et le modèle serait:
la source
video.yt$aspectRatio
est vide ou indéfini? Est-il possible d'appliquer une valeur par défaut?Dans ce cas, vous souhaitez «calculer» une valeur de pixel en fonction d'une propriété d'objet.
Je définirais une fonction dans le contrôleur qui calcule les valeurs des pixels.
Dans le contrôleur:
Ensuite, dans votre modèle, vous écrivez simplement:
la source
Je suis d'accord qu'un ternaire est extrêmement propre. Il semble que cela soit très situationnel, mais comme je dois parfois afficher div ou p ou table, donc avec une table, je ne préfère pas un ternaire pour des raisons évidentes. Faire un appel à une fonction est généralement idéal ou dans mon cas, je l'ai fait:
la source
vous pouvez utiliser la directive ng-if comme ci-dessus.
la source
Une possibilité pour Angular: j'ai dû inclure une instruction if - dans la partie html, j'ai dû vérifier si toutes les variables d'une URL que je produis sont définies. Je l'ai fait de la manière suivante et cela semble être une approche flexible. J'espère que ce sera utile pour quelqu'un.
La partie html dans le modèle:
Et la partie dactylographiée:
Merci et meilleures salutations,
Jan
la source
ng instruction If else
la source