Angular start ngFor index from 1

The*_*eal 27 angular

是否有可能从1而不是0开始ngFor index?

let data of datas;let i=index+1
Run Code Online (Sandbox Code Playgroud)

没用.

k2f*_*2fx 38

 *ngFor="let item of items | slice:1; let i = index;
Run Code Online (Sandbox Code Playgroud)

SlicePipe

  • @ BBaysinger谁是Rad? (3认同)
  • 这是从末尾删除数据。有什么办法可以从两端切片吗? (2认同)

Dan*_*ger 13

这是不可能的,但您可以使用Array.prototype.slice()跳过第一个元素:

<li *ngFor="let item of list.slice(1)">{{ item }}</li>
Run Code Online (Sandbox Code Playgroud)

如果您更喜欢这种语法,SlicePipe也是一个选项:

<li *ngFor="let item of items | slice:1">{{ item }}</li>
Run Code Online (Sandbox Code Playgroud)

描述

所有的行为是基于JavaScript的API的预期行为Array.prototype.slice()String.prototype.slice().

在a上操作时Array,即使返回Array所有元素,返回的也始终是副本.

如果您还需要匹配索引,只需添加跳过的元素数量:

<li *ngFor="let item of list.slice(1); let i = index">{{ i + 1 }} {{ item }}</li>
Run Code Online (Sandbox Code Playgroud)

要么:

<li *ngFor="let item of items | slice:1; let i = index">{{ i + 1 }} {{ item }}</li>
Run Code Online (Sandbox Code Playgroud)

无论如何,如果你需要在模板中放置太多逻辑来使这个用于你的用例,那么你应该将该逻辑移动到控制器,然后用你需要的确切元素和数据构建另一个数组,或者缓存切片数组,以避免在数据未更改时创建新数组.


Edo*_*610 11

这对我来说效果很好。带单引号

*ngFor="let data of datas; let i = 'index+1'";
Run Code Online (Sandbox Code Playgroud)

这样我就不会从数组 datas 中删除任何数据,同时索引从 1 开始到 datas 长度结束。

  • 这应该是最重要的答案!它实际上可以在不切掉任何数组的情况下工作! (4认同)

小智 10

  <li *ngFor="let info of data; let i = index">
    {{i + 1}} {{info.title}}
  </li>
Run Code Online (Sandbox Code Playgroud)


Jos*_*ack 9

该问题有2个可能的答案,具体取决于实际问题.

如果意图是跳过数组的第一个元素,则涉及切片的答案是正确的方向.

但是,如果想要在仍然遍历所有数组的情况下简单地移动索引,则切片不是正确的方法,因为它将跳过数组中的第0个元素,从而仅输出n-1长度数组中的项n.

@Taylor提供了一个真实世界的例子,说明何时可能需要为了显示目的而移动索引,例如输出第一个条目应该读取1而不是0的列表.

这是另一个类似的例子:

<li *ngFor="let book of books; let i = index">
    {{ i + 1 }}.  {{ book.title }}
</li>
Run Code Online (Sandbox Code Playgroud)

这将产生如下输出:

  1. 示例书名

  2. 另一本书名

...

  • 当然,还有更简单/更好的方法来制作编号列表。然而,特意选择这个例子是为了清楚起见,并保持对所提出问题的关注(与编号列表无关)。 (2认同)