J'ai besoin d'interpoler une valeur à l'intérieur d'une ngClass
expression mais je n'arrive pas à la faire fonctionner.
J'ai essayé ces solutions qui sont les seules qui me font sens, ces deux échouent à l'interpolation:
<button [ngClass]="{'{{namespace}}-mybutton': type === 'mybutton'}"></button>
<button [ngClass]="{namespace + '-mybutton': type === 'mybutton'}"></button>
Celui-ci fonctionne avec l'interpolation mais échoue avec la classe ajoutée dynamiquement car la chaîne entière est ajoutée en tant que classe:
<button ngClass="{'{{namespace}}-mybutton': type === 'mybutton'}"></button>
Ma question est donc de savoir comment utiliser les noms de classe dynamiques ngClass
comme ça?
Celui-ci devrait fonctionner
mais Angular jette sur cette syntaxe. Je considérerais cela comme un bug. Voir également https://stackoverflow.com/a/36024066/217408
Les autres sont invalides. Vous ne pouvez pas utiliser
[]
avec{{}}
. L'un ou l'autre.{{}}
lie le résultat stringifié qui ne conduit pas au résultat souhaité dans ce cas car un objet doit être passé àngClass
.Exemple de Plunker
Pour contourner le problème, la syntaxe indiquée par @A_Sing ou
peut être utilisé.
la source
Voici un exemple de quelque chose que je fais pour plusieurs classes avec plusieurs conditions :
[ngClass]="[variableInComponent || !anotherVariableInComponent ? classes.icon.large : classes.icon.small, editing ? classes.icon.editing : '']"
où:
classes
est un objet contenant des chaînes de différents noms de classe. par exempleclass.icon.large = "app__icon--large"
C'est dynamique! Mises à jour à mesure que les conditions se mettent à jour.
la source
Je veux mentionner un point important à garder à l'esprit lors de la mise en œuvre de la liaison de classe.
class ici ne lie pas correctement car une condition doit être remplie, alors que vous avez deux classes identiques 'badge-warning' qui peuvent avoir deux conditions différentes. Pour corriger cela
la source
la source
Vous pouvez utiliser
<i [className]="'fa fa-' + data?.icon"> </i>
la source