Muszę interpolować wartość wewnątrz ngClass
wyrażenia, ale nie mogę zmusić go do działania.
Wypróbowałem te rozwiązania, które jako jedyne mają dla mnie sens, te dwa zawodzą z interpolacją:
<button [ngClass]="{'{{namespace}}-mybutton': type === 'mybutton'}"></button>
<button [ngClass]="{namespace + '-mybutton': type === 'mybutton'}"></button>
Ten działa z interpolacją, ale kończy się niepowodzeniem z dynamicznie dodaną klasą, ponieważ cały ciąg jest dodawany jako klasa:
<button ngClass="{'{{namespace}}-mybutton': type === 'mybutton'}"></button>
Więc moje pytanie brzmi: jak używasz dynamicznych nazw klas w ngClass
ten sposób?
Ten powinien działać
ale Angular rzuca się na tę składnię. Uważam to za błąd. Zobacz też https://stackoverflow.com/a/36024066/217408
Pozostałe są nieważne. Nie możesz używać
[]
razem z{{}}
. Albo jedno, albo drugie.{{}}
wiąże wynik stringified, który w tym przypadku nie prowadzi do pożądanego wyniku, ponieważ obiekt musi zostać przekazanyngClass
.Przykład Plunkera
Aby obejść składnię pokazaną przez @A_Sing lub
może być użyty.
źródło
Oto przykład czegoś, co robię dla wielu klas z wieloma warunkami :
[ngClass]="[variableInComponent || !anotherVariableInComponent ? classes.icon.large : classes.icon.small, editing ? classes.icon.editing : '']"
gdzie:
classes
jest obiektem zawierającym ciągi różnych nazw klas. na przykładclass.icon.large = "app__icon--large"
To dynamiczne! Aktualizacje w miarę aktualizacji warunków.
źródło
chcę wspomnieć o kilku ważnych kwestiach, o których należy pamiętać podczas wdrażania wiązania klas.
class tutaj nie jest wiążące poprawnie, ponieważ jeden warunek ma być spełniony, podczas gdy masz dwie identyczne klasy „badge-warning”, które mogą mieć dwa różne warunki. Aby to poprawić
źródło
źródło
Możesz użyć
<i [className]="'fa fa-' + data?.icon"> </i>
źródło