属性の値としてインデックスを持つngFor


571

ngForも電流を追跡する単純なループがありindexます。index印刷できるように、その値を属性に格納したい。しかし、私はこれがどのように機能するのか理解できません。

私はこれを基本的に持っています:

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

の値を#i属性に格納したいdata-index。私はいくつかの方法を試しましたが、どれもうまくいきませんでした。

ここにデモがあります:http : //plnkr.co/edit/EXpOKAEIFlI9QwuRcZqp?p=preview

属性にindex値を保存するにはどうすればよいdata-indexですか?

回答:


1001

この構文を使用して、HTML要素の属性にインデックス値を設定します。

角度> = 2

letではなくを使用して値を宣言する必要があります#

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

角度= 1

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

これが更新されたplunkrです:http ://plnkr.co/edit/LiCeyKGUapS5JKkRWnUJ?p=preview 。


4
実際、これattr.はAngular2に式の値を属性名に設定するように指示する構文です。:それはちょうどJSONを評価するようではありません、私は推測する;-)このリンクを参照してくださいangular.io/docs/ts/latest/guide/template-syntax.html
ティエリーTEMPLIER

1
おかげで、それでうまくいきます。また、ngForli代わりにを付けるつもりでしたul
Vivendi

1
元の回答と新しく更新されたコード値の両方を取得するために、最近の編集をロールバックしました。初期のベータ版を探していたところ、この回答が変更されたため、angular 2のベータ版には適用されなくなりました
。– ps2goat

4
更新:08/2017 <div * ngFor = "英雄の英雄を任せてください; let i = index; trackBy:trackById">
Maxi

4
2018年10月17日の時点で、Angular 6は* ngFor = "アイテムのアイテムを;インデックスとしてi"を使用しています。以下のレオの回答を参照してください。
ゲル、

318

Angular 5/6/7/8の場合:

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

古いバージョンでは

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

Angular.io▸API▸NgForOf

単体テストの例

別の興味深い例


11
これだよ!2018年10月17日現在。ありがとうございました。(なぜ構文を変更し続けるので、迷惑なのですか?
Gel

2
これは最初の答えよりも優れた単純な答えです。
ケンリーサンチェス

2
index as iうまくいきます、ありがとう。しかし、*ngFor繰り返される要素(たとえば、<li>この場合)に進むつもりはありませんか?あなたが提案したコードは、複数<ul>のではなく複数<li>のを作成します。
Liran H

index as iよりエレガントであるlet i = index
Dabbbb。

108

これを更新しただけで、ティエリーの答えはまだ正しいですが、Angular2は次の点で更新されています。

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

#i = index今でなければなりませんlet i = index

編集/更新:

*ngForそれがあるべきこの例のように、あなたはforeachのに欠けている要素にする必要があります:

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

編集/更新

角度5

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

EDIIT / UPDATE

角度7/8

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

3
そして、#itemする必要がありますlet item;-)
ギュンターZöchbauer

52

私は以前にすでに回答されていると思いますが、順序付けされていないリストにデータを入力している場合の修正*ngForは、繰り返したい要素に含まれます。だから、それは誠実である必要があり<li>ます。また、Angular2ではletを使用して変数を宣言しています。

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

* ngForディレクティブをulタグで指定するのがベストプラクティスだと思います<ul * ngFor = "アイテムのアイテムを;インデックスとしてi" [attr.data-index] = "i"> <li> {{item} } </ li> </ ul>
バジュラン2018

1
ulタグでngForを指定すると、繰り返されるエンティティはulになりますが、ここではulを繰り返したくない場合は、リスト要素、つまりliを繰り返し処理するだけです。
モニカ2018

21

他の答えは正しいですが、[attr.data-index]完全に省略して使用することができます

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

2

あなたは使用することができます[attr.data-インデックス]角度のバージョン2以上で使用でき、データ-index属性にインデックスを保存するために、直接。

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

1

これを試して

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

0

laravelページネーションを使用

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>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.