ngÖzellikte değer olarak dizinli forFor


571

Ben de ngForakımı takip eden basit bir döngü var index. Bu indexdeğeri yazdırabilmek için bir öznitelikte saklamak istiyorum . Ama bunun nasıl çalıştığını anlayamıyorum.

Temelde bu var:

<ul *ngFor="#item of items; #i = index" data-index="#i">
    <li>{{item}}</li>
</ul>

Değerini #iöznitelikte saklamak istiyorum data-index. Birkaç yöntem denedim ama hiçbiri işe yaramadı.

Burada bir demom var: http://plnkr.co/edit/EXpOKAEIFlI9QwuRcZqp?p=preview

indexDeğeri data-indexöznitelikte nasıl saklayabilirim ?

Yanıtlar:


1000

Dizin değerini HTML öğesinin bir özniteliğine ayarlamak için bu sözdizimini kullanırsınız:

Açısal> = 2

letDeğeri beyan etmek için kullanmak zorundasınız #.

<ul>
    <li *ngFor="let item of items; let i = index" [attr.data-index]="i">
        {{item}}
    </li>
</ul>

Açısal = 1

<ul>
    <li *ngFor="#item of items; #i = index" [attr.data-index]="i">
        {{item}}
    </li>
</ul>

Güncellenmiş plunkr: http://plnkr.co/edit/LiCeyKGUapS5JKkRWnUJ?p=preview .


4
Aslında, attr.Angular2'ye ifadenin değerini öznitelik adına ayarlamasını söyleyen bir sözdizimidir. Sadece JSON'u
Thierry Templier

1
Teşekkürler, bu hile yapar. Ayrıca, ben koymak istedim ngForüzerine liyerine ul.
Vivendi

1
Hem orijinal yanıta hem de yeni güncellenmiş kod değerine sahip olmak için son düzenlemeyi geri aldım. Bazı erken beta şeyler arıyordum ve bu cevabın değiştirildiğini gördüm, bu yüzden artık açısal 2'nin beta versiyonuna uygulanmadı.
ps2goat

4
GÜNCELLEME: 08/2017 <div * ngFor = "kahramanların kahramanı olsun; i = dizin olsun; trackBy: trackById">
Maxi

4
17 Ekim 2018 itibarıyla Açısal 6, * ngFor = "öğelerin öğe olmasına izin ver; i olarak dizin" ifadesini kullanıyor. Aşağıdaki Leo'nun cevabına bakın.
Jel

318

Açılı 5/6/7/8:

<ul>
  <li *ngFor="let item of items; index as i">
    {{i+1}} {{item}}
  </li>
</ul>

Eski sürümlerde

<ul *ngFor="let item of items; index as i">
  <li>{{i+1}} {{item}}</li>
</ul>

Angular.io ▸ API ▸ NgForOf

Birim test örnekleri

Bir başka ilginç örnek


11
budur! 17 Ekim 2018 itibariyle çalışıyor. Teşekkür ederim. (neden sözdizimini değiştirmeye devam ediyorlar, bu yüzden sinir bozucu?
Gel

2
bu birincisinden daha iyi ve basit bir cevap.
Kenry Sanchez

2
index as iharika çalışıyor, teşekkürler. Ancak *ngFortekrarlanacak öğeye devam etmek istenmiyor mu (örn <li>. Bu durumda)? Önerdiğiniz kod, birden çok <ul>s çoğaltıcı oluşturur <li>.
Liran H

index as idaha zariflet i = index
Dabbbb.

108

Sadece bir güncelleme, Thierry'nin cevabı hala doğru, ancak Angular2'de aşağıdakilerle ilgili bir güncelleme yapıldı:

<ul *ngFor="let item of items; let i = index" [attr.data-index]="i">
  <li>{{item}}</li>
</ul>

#i = indexŞimdi olmalılet i = index

DÜZENLEME / GÜNCELLEME:

*ngForOlması gereken bu nedenle örneğin, sen foreach isteyen konum eleman olmalıdır:

<ul>
  <li *ngFor="let item of items; let i = index" [attr.data-index]="i">{{item}}</li>
</ul>

DÜZENLEME / GÜNCELLEME

Açısal 5

<ul>
  <li *ngFor="let item of items; index as i" [attr.data-index]="i">{{item}}</li>
</ul>

EDIIT / GÜNCELLEME

Açısal 7/8

<ul *ngFor="let item of items; index as i">
  <li [attr.data-index]="i">{{item}}</li>
</ul>

3
Ve #itemolmalıdır let item;-)
Günter Zöchbauer

52

Sanırım daha önce cevaplanmıştı, ama sadece sıralanmamış bir listeyi dolduruyorsanız bir düzeltme *ngFor, tekrarlamak istediğiniz öğeye gelecek. Bu yüzden içeride olmalı <li>. Ayrıca, Angular2 artık bir değişkeni bildirmek için let kullanıyor.

<ul>
    <li *ngFor="let item of items; let i = index" [attr.data-index]="i">     
               {{item}}
    </li>
</ul>

Sanırım ul etiketi <ul * ngFor = "içinde * ngFor yönergesini belirtmenin en iyi yöntem olduğunu düşünüyorum öğelerin öğe; dizin olarak i" [attr.data-index] = "i"> <li> {{item} } </li> </ul>
bajran

1
Ul etiketinde ngFor belirtirseniz, tekrarlanacak varlık ul olacaktır, ancak burada ul'yi tekrarlamak istemiyorsanız, sadece liste öğelerinde yani li'yi yinelemek istiyorsunuz.
monica

21

Diğer cevaplar doğru ama [attr.data-index]tamamen atlayabilir ve sadece

<ul>
    <li *ngFor="let item of items; let i = index">{{i + 1}}</li>
</ul

2

Dizini, Açısal sürüm 2 ve üstü için geçerli olan veri dizini özelliğine kaydetmek için doğrudan [attr.data-index] öğesini kullanabilirsiniz .

    <ul*ngFor="let item of items; let i = index" [attr.data-index]="i">
         <li>{{item}}</li>
    </ul>

1

Bunu dene

<div *ngFor="let piece of allPieces; let i=index">
{{i}} // this will give index
</div>

0

laravel sayfalama ile

file.component.ts file

    datasource: any = {
        data: []
    }

    loadData() {
        this.service.find(this.params).subscribe((res: any) => {
            this.datasource = res;
        });
    }

html file

   <tr *ngFor="let item of datasource.data; let i = index">
       <th>{{ datasource.from + i }}</th>
   </tr>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.