771

我有一个简单的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属性中?

4

9 回答 9

1321

我将使用此语法将索引值设置为 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 。

于 2016-02-15T09:29:22.653 回答
410

在 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

单元测试示例

另一个有趣的例子

于 2017-12-04T14:29:50.497 回答
125

只是对此的更新,蒂埃里的回答仍然是正确的,但是 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>

编辑/更新

角度 7/8

<ul *ngFor="let item of items; index as i">
  <li [attr.data-index]="i">{{item}}</li>
</ul>
于 2016-06-28T09:23:51.670 回答
54

我认为它之前已经得到了回答,但如果你正在填充一个无序列表,这只是一个更正,*ngFor它将出现在你想要重复的元素中。所以它应该是 insdide <li>。此外,Angular2 现在使用 let 来声明一个变量。

<ul>
    <li *ngFor="let item of items; let i = index" [attr.data-index]="i">     
               {{item}}
    </li>
</ul>
于 2016-07-25T20:49:49.460 回答
23

其他答案是正确的,但您可以完全省略[attr.data-index]并只使用

<ul>
    <li *ngFor="let item of items; let i = index">{{i + 1}}</li>
</ul
于 2017-11-10T20:59:27.290 回答
16

添加这个较晚的答案以显示大多数人会遇到的案例。如果您只需要查看列表中的最后一项是什么,请使用last关键字:

<div *ngFor="let item of devcaseFeedback.reviewItems; let last = last">
  <divider *ngIf="!last"></divider>
</div>

这会将分隔符组件添加到除最后一项之外的每个项目。

ngFor由于下面的评论,我将添加可以别名为局部变量的其余导出值(如文档中所示):

  • $implicit: T : iterable (ngForOf) 中各个项目的值。
  • ngForOf: NgIterable : 可迭代表达式的值。当表达式比属性访问更复杂时很有用,例如在使用异步管道 (userStreams | async) 时。
  • index: number:iterable 中当前项的索引。
  • count: number : 可迭代的长度。
  • first: boolean:当项目是可迭代的第一项时为真。
  • last: boolean:当项目是可迭代项中的最后一项时为真。
  • even: boolean:当项目在可迭代中具有偶数索引时为真。
  • 奇数:布尔值:当项目在可迭代中具有奇数索引时为真。
于 2020-10-20T08:13:34.357 回答
7

您可以直接使用[attr.data-index]将索引保存到 Angular 2 及更高版本中可用的 data-index 属性。

    <ul*ngFor="let item of items; let i = index" [attr.data-index]="i">
         <li>{{item}}</li>
    </ul>
于 2019-12-27T09:20:05.390 回答
5

使用 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>
于 2020-05-16T18:55:08.720 回答
2

尝试这个

<div *ngFor="let piece of allPieces; let i=index">
{{i}} // this will give index
</div>
于 2019-04-15T11:00:20.703 回答