2015-12-29 17 views
5

Próbuję dodać wiele wartości w * ngClass, co używane do pracy na poprzednich wydań alfa i nie wydają się działać teraz na angular2 BETA:Wiele klas w ngClass

<i *ngClass="['fa','fa-star']"></i> 

To wywołuje błąd :

EXCEPTION: TypeError: Cannot read property 'add' of undefined in [['fa','fa-star'] in [email protected]:27]

Czego mi tu brakuje?

Odpowiedz

16

Należy użyć nawiasów kwadratowych, aby utworzyć powiązanie właściwości. Zobacz this plunk

<i [ngClass]="['fa','fa-star']"></i> 
+0

Jak zmienić te klasy dynamicznie jeśli zapewniając tablicę w swoim szablonie? – Zyzle

+0

@Zysle Stworzyłem zmienną dla tej tablicy i zmieniłem ją z mojego komponentu (na przykład '[ngClass] =" myDynamicArray "'). – alexpods

+0

Chciałbym zaktualizować odpowiedź wtedy, jak wskazałem, oryginalny przykład nie różni się od zwykłego robienia 'class =" fa fa-star "' w szablonie – Zyzle

4

Jeśli nie będzie zmiany tych klas dynamicznie następnie używając ngClass jest przesadą. Możesz po prostu użyć class="fa fa-star" w swoim szablonie.

ngClass Powinny być używane, gdy chcesz je włączyć i wyłączyć dynamicznie. Jest przykładem w docs:

komponentu miałoby metodę:

setClasses() { 
    return { 
    saveable: this.canSave,  // true 
    modified: !this.isUnchanged, // false 
    special: this.isSpecial,  // true 
    } 
} 

następnie użyć ngClass w szablonie tak:

<div [ngClass]="setClasses()">This div is saveable and special</div> 
+0

Zmieniam je dynamicznie, ale twoje rozwiązanie jest naprawdę interesujące. – Sagi

+1

OK, ale jak zamierzasz je zmienić, jeśli masz mocno zakodowaną tablicę w ngClass? – Zyzle

+0

Uprośniłem dany przykład. W moim prawdziwym przypadku używam klas dynamicznych zwracanych z metody składowej. – Sagi

4

Można także zbudować ciąg zawierający kilka klas .

W tym przypadku additionalClass jest var @Input zawierający nazwę klasy i aktywną jest wartością logiczną, która określa aktywnego klasa

<div [ngClass]="(additionalClass + ' ' + (active ? 'active' : ''))"></div>