Je me demandais s'il y avait un moyen angulaire d'afficher conditionnellement du contenu autre que l'utilisation de ng-show, etc. Par exemple, dans backbone.js, je pourrais faire quelque chose avec du contenu en ligne dans un modèle comme:
<% if (myVar === "two") { %> show this<% } %>
mais en angulaire, je semble être limité à montrer et cacher les choses enveloppées dans des balises html
<p ng-hide="true">I'm hidden</p>
<p ng-show="true">I'm shown</p>
Quelle est la méthode recommandée en angulaire pour afficher et masquer de manière conditionnelle le contenu en ligne en angulaire en utilisant simplement {{}} plutôt que d'envelopper le contenu dans des balises html?
angularjs
if-statement
ternary-operator
user1469779
la source
la source
Réponses:
EDIT: la réponse de 2Toad ci - dessous est ce que vous cherchez! Votez cette chose
Si vous utilisez Angular <= 1.1.4, cette réponse fera l'affaire:
Encore une réponse à cela. Je poste une réponse distincte, car il s'agit plus d'une tentative "exacte" de solution que d'une liste de solutions possibles:
Voici un filtre qui fera un "si immédiat" (alias iif):
et peut être utilisé comme ceci:
la source
Angular 1.1.5 a ajouté la prise en charge des opérateurs ternaires:
la source
myVar
seulement si elle est fausse? (c'est-à-dire comment puis-je imbriquer des variables dans l'expression?) J'ai essayé avec{{myVar === "two" ? "it's true" : {{myVar}}}}
mais cela ne fonctionne pas.myVar
propriété n'a pas besoin d'être entourée d'accolades supplémentaires, elle est déjà à l'intérieur d'une expression. Essayez{{myVar === "two" ? "it's true" : myVar}}
Des milliers de façons d'écorcher ce chat. Je me rends compte que vous posez des questions spécifiques entre {{}}, mais pour ceux qui viennent ici, je pense que cela vaut la peine de montrer certaines des autres options.
fonction sur votre portée $ (IMO, c'est votre meilleur pari dans la plupart des scénarios):
ng-show et ng-hide bien sûr:
ngSwitch
Un filtre personnalisé comme l'a suggéré Bertrand. (c'est votre meilleur choix si vous devez faire la même chose encore et encore)
Ou une directive personnalisée:
Personnellement, dans la plupart des cas, j'irais avec une fonction sur ma portée, cela garde le balisage assez propre et il est rapide et facile à implémenter. À moins que vous ne fassiez la même chose encore et encore, auquel cas j'irais avec la suggestion de Bertrand et créerais un filtre ou éventuellement une directive, selon les circonstances.
Comme toujours, la chose la plus importante est que votre solution est facile à entretenir et peut être testée, espérons-le. Et cela va dépendre complètement de votre situation spécifique.
la source
J'utilise ce qui suit pour définir conditionnellement la classe attr lorsque la classe ng ne peut pas être utilisée (par exemple lors du style SVG):
La même approche devrait fonctionner pour d'autres types d'attributs.
(Je pense que vous devez être sur le dernier Angular instable pour utiliser ng-attr-, je suis actuellement sur 1.1.4)
J'ai publié un article sur le travail avec AngularJS + SVG qui parle de cela et des problèmes connexes. http://www.codeproject.com/Articles/709340/Implementing-a-Flowchart-with-SVG-and-AngularJS
la source
Pour vérifier un contenu variable et avoir un texte par défaut, vous pouvez utiliser:
la source
Si je vous ai bien compris, je pense que vous avez deux façons de procéder.
Vous pouvez d'abord essayer ngSwitch et la deuxième façon possible serait de créer votre propre filtre . Probablement, ngSwitch est la bonne approche, mais si vous voulez masquer ou afficher du contenu en ligne en utilisant simplement le filtre {{}}, c'est la voie à suivre.
Voici un violon avec un simple filtre comme exemple.
la source
La bibliothèque de l'interface utilisateur angulaire a une directive intégrée ui-if pour la condition dans le modèle / Vues jusqu'à l'interface utilisateur angulaire 1.1.4
Exemple: prise en charge de l'interface utilisateur angulaire jusqu'à l'interface utilisateur 1.1.4
ng-si disponible dans toute la version angulaire après 1.1.4
si vous avez des données dans une variable de tableau, seul le div apparaîtra
la source
ui-if
a été supprimé au moins de la dernière version angular-ui mais depuis angular 1.1.5 vous avezng-if
(de ce commentaire )Donc avec Angular 1.5.1 (avait une dépendance d'application existante sur d'autres dépendances de la pile MEAN, c'est pourquoi je n'utilise pas actuellement 1.6.4)
Cela fonctionne pour moi comme le dit l'OP
{{myVar === "two" ? "it's true" : "it's false"}}
la source
si vous voulez afficher "Aucun" lorsque la valeur est "0", vous pouvez utiliser comme:
ou vrai faux en js angulaire
la source
Fonctionne même dans des situations exotiques:
la source
Je vais jeter le mien dans le mix:
https://gist.github.com/btm1/6802312
ceci évalue l'instruction if une fois et n'ajoute aucun écouteur de surveillance MAIS vous pouvez ajouter un attribut supplémentaire à l'élément qui a le set-if appelé wait-for = "somedata.prop" et il attendra que ces données ou propriétés soient définies avant évaluer l'instruction if une fois. cet attribut supplémentaire peut être très pratique si vous attendez des données d'une demande XHR.
la source