Angular начать ngДля индекса от 1

Можно ли запустить ngFor index из 1 вместо 0?

let data of datas;let i=index+1

не работает.

Ответ 1

 *ngFor="let item of items | slice:1; let i = index;

SlicePipe

Ответ 2

Это невозможно, но вы можете использовать Array.prototype.slice() чтобы пропустить первый элемент:

<li *ngFor="let item of list.slice(1)">{{ item }}</li>

SlicePipe также опция, если вы предпочитаете этот синтаксис:

<li *ngFor="let item of items | slice:1">{{ item }}</li>

Описание

Все поведение основано на ожидаемом поведении JavaScript API Array.prototype.slice() и String.prototype.slice().

При работе с Array возвращенный Array всегда является копией, даже когда возвращаются все элементы.

Если вам также нужен индекс для соответствия, просто добавьте количество пропущенных к нему элементов:

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

Или же:

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

В любом случае, если вам нужно поместить слишком много логики в шаблон, чтобы это работало для вашего случая использования, вам, вероятно, следует переместить эту логику в контроллер и просто создать другой массив с точными элементами и данными, которые вам нужны, или кэшировать нарезанный фрагмент. массив, чтобы избежать создания нового, если данные не изменились.

Ответ 3

  <li *ngFor="let info of data; let i = index">
    {{i + 1}} {{info.title}}
  </li>

Ответ 4

Есть 2 возможных ответа на вопрос, в зависимости от того, что на самом деле спрашивали.

Если цель состоит в том, чтобы пропустить первый элемент массива, то ответы, включающие срез, находятся в правильном направлении.

Однако, если цель состоит в том, чтобы просто сместить индекс, продолжая итерацию по всему массиву, то срез НЕ является правильным подходом, поскольку он пропустит 0-й элемент в массиве, выводя тем самым только n-1 элементов из массива длина n.

@Taylor привел реальный пример того, когда индекс может нуждаться в смещении для целей отображения, например, при выводе списка, где первая запись должна читать 1, а не 0.

Вот еще один похожий пример:

<li *ngFor="let book of books; let i = index">
    {{ i + 1 }}.  {{ book.title }}
</li>

который будет производить вывод, как:

  1. Образец названия книги

  2. Другое название книги

...

Ответ 5

Вы не можете по крайней мере на данный момент, кажется, что команда, стоящая за angular 2, пытается сохранить ngFor очень просто, есть аналогичная проблема открыт на angular 2 репо о выполнении множественного присвоения индекса и ответ был:

Синтаксис

должен быть простым для инструментов для его поддержки.

Ответ 6

Мы можем подойти к нему, как показано ниже для пользовательских тегов/тегов по умолчанию:

 <custom-tag *ngFor="let item of items; let i = index" [text]="Item + getIndex(i)"></custom-tag>

В Javascript:

function getIndex(i) {return Number(i + 1).toString();}