2016-01-13 7 views
8

Występuje problem z utworzeniem dynamicznej nazwy klasy na podstawie indeksu Angular 2 ngFor. Musiałem użyć następującej składni, ponieważ Angular 2 nie lubi ngFor i ngIf na tym samym elemencie.Angular 2 Generate Class Name Na podstawie indeksu ngFora

Przy pomocy tej składni, w jaki sposób utworzyć dynamiczną nazwę klasy o wartości indeksu na {{index}}. Wiem, że to nie jest prawidłowy kod A2, ale umieściłem go w moim przykładzie kodu, aby pokazać, gdzie chciałbym, aby pojawiła się wartość.

<div class="product-detail__variants"> 
    <template ngFor #variant [ngForOf]="variants" #index="index"> 
     <div *ngIf="currentVariant == index"> 
      <div class="product-detail-carousel-{{index}}"> 

      </div> 
     </div> 
    </template> 
</div> 

Wartość "warianty" to pusta tablica o określonej długości. "wariant" zatem nie ma żadnej wartości.

"currentVariant" to numer, który domyślnie jest równa 0.

EDIT: Ten kod powyżej jest poprawne. Miałem kolejny obcy błąd, który moim zdaniem był związany z tym kodem.

+1

próbowałeś z 'ngClass'? https://angular.io/docs/ts/latest/api/common/NgClass-directive.html – Langley

+0

Mój kod najwyraźniej działa, a kolejnym obcym błędem było wyrzucenie go. Ten kod jest poprawny! – AJStacy

Odpowiedz

8

ja naprawdę nie rozumiem problemu ;-)

Istnieją dwa sposoby ustawienia zajęcia dla konkretnego elementu:

  • sposób zrobić z klamrowych:

    @Component({ 
        selector: 'my-app', 
        template: ` 
        <div class="product-detail__variants"> 
         <template ngFor #variant [ngForOf]="variants" #index="index"> 
         <div *ngIf="currentVariant == index"> 
          <div class="product-detail-carousel-{{index}}"> 
          Test 
          </div> 
         </div> 
         </template> 
        </div> 
        `, 
        styles: [ 
        '.product-detail-carousel-2 { color: red }' 
        ] 
    }) 
    

    Test wyświetla się tylko dla trzeciego elementu (indeks 2) i na czerwono.

  • Jak sugeruje @Langley za pomocą dyrektywy ngClass

    import {NgClass} from 'angular2/common'; 
    
    @Component({ 
        selector: 'my-app', 
        template: ` 
        <div class="product-detail__variants"> 
         <template ngFor #variant [ngForOf]="variants" #index="index"> 
         <div *ngIf="currentVariant == index"> 
          <div class="product-detail-carousel-{{index}}"> 
          Test 
          </div> 
         </div> 
         </template> 
        </div> 
        `, 
        styles: [ 
        '.product-detail-carousel-2 { color: red }' 
        ], 
        directives: [ NgClass ] 
    }) 
    

    różnych jest to, że trzeba określić dyrektywę NgClass wewnątrz atrybutu komponentu providers. Ponownie Test jest wyświetlany tylko dla trzeciego elementu (indeks 2) i na czerwono.

Twoje następujących zdań: „Wartość variants jest pusta tablica zadanej długości variant ma zatem wartość currentVariant to numer, który domyślnie jest równa 0...”. Jak można się spodziewać wyświetlenia czegoś, jeśli tablica jest pusta? ngFor jest iteracja ...

Nadzieję, że to pomaga, Thierry

+0

Nie próbuję wyświetlać wartości, po prostu próbuję zapętlić określoną liczbę razy w oparciu o wartość "numVariants", która jest tłumaczona na długość tablicy, aby ngFor mógł zapętlić (ponieważ ng-repeat nie jest już istnieje). Podobno miałem inny obcy błąd, który wpłynął na mój kod i mój kod Angular 2 był już poprawny. Dziękuję za zweryfikowanie tego dla mnie. – AJStacy