속성의 값으로 인덱스를 갖는 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해야합니까?

답변:


998

이 구문을 사용하여 색인 값을 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을 평가하는 것과는 다릅니다
Thierry Templier

1
고마워, 그 트릭을 수행합니다. 또한, 나는를 넣어 의미 ngFor상의 li대신의 ul.
Vivendi

1
원래 답변과 새로운 업데이트 코드 값을 모두 갖기 위해 최근 편집 내용을 롤백했습니다. 초기 베타 버전을 찾고
있었고이

4
업데이트 : 08/2017 <div * ngFor = "영웅 영웅; i = index; trackBy : trackById">
Maxi

4
2018 년 10 월 17 일 현재 Angular 6은 * ngFor = "항목의 항목, i로 색인 지정"을 사용하고 있습니다. 아래의 Leo 답변을 참조하십시오.
Gel

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
이것은 첫 번째 것보다 낫고 간단한 대답입니다.
Kenry Sanchez

2
index as i잘 작동합니다. 감사합니다. 그러나 *ngFor반복 될 요소를 계속 사용하지 <li>않겠습니까 (예 : 이 경우)? 제안한 코드 <ul>는 여러 개가 아닌 여러 개를 만듭니다 <li>.
Liran H

index as i보다 우아let i = index
Dabbbb.

108

이것에 대한 업데이트, Thierry의 대답은 여전히 ​​정확하지만 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 / 업데이트

앵귤러 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반복하려는 요소가 나타납니다. 그래서 그것은 insdide해야합니다 <li>. 또한 Angular2는 이제 let을 사용하여 변수를 선언합니다.

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

ul 태그에 * ngFor 지시문을 지정하는 것이 가장 좋습니다. <ul * ngFor = "항목 항목; i로 색인화"[attr.data-index] = "i"> <li> {{item} } </ li> </ ul>
bajran

1
ul 태그에 ngFor를 지정하면 반복되는 엔티티는 ul이 되겠지만 여기서는 ul을 반복하고 싶지 않으므로리스트 요소, 즉 li을 반복하고 싶습니다.
monica

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

라 라벨 매김으로

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.