Можно ли запустить ngFor index из 1 вместо 0?
let data of datas;let i=index+1
не работает.
Можно ли запустить ngFor index из 1 вместо 0?
let data of datas;let i=index+1
не работает.
*ngFor="let item of items | slice:1; let i = index;
Это невозможно, но вы можете использовать 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>
В любом случае, если вам нужно поместить слишком много логики в шаблон, чтобы это работало для вашего случая использования, вам, вероятно, следует переместить эту логику в контроллер и просто создать другой массив с точными элементами и данными, которые вам нужны, или кэшировать нарезанный фрагмент. массив, чтобы избежать создания нового, если данные не изменились.
<li *ngFor="let info of data; let i = index">
{{i + 1}} {{info.title}}
</li>
Есть 2 возможных ответа на вопрос, в зависимости от того, что на самом деле спрашивали.
Если цель состоит в том, чтобы пропустить первый элемент массива, то ответы, включающие срез, находятся в правильном направлении.
Однако, если цель состоит в том, чтобы просто сместить индекс, продолжая итерацию по всему массиву, то срез НЕ является правильным подходом, поскольку он пропустит 0-й элемент в массиве, выводя тем самым только n-1
элементов из массива длина n
.
@Taylor привел реальный пример того, когда индекс может нуждаться в смещении для целей отображения, например, при выводе списка, где первая запись должна читать 1, а не 0.
Вот еще один похожий пример:
<li *ngFor="let book of books; let i = index">
{{ i + 1 }}. {{ book.title }}
</li>
который будет производить вывод, как:
Образец названия книги
Другое название книги
...
Вы не можете по крайней мере на данный момент, кажется, что команда, стоящая за angular 2, пытается сохранить ngFor очень просто, есть аналогичная проблема открыт на angular 2 репо о выполнении множественного присвоения индекса и ответ был:
Синтаксисдолжен быть простым для инструментов для его поддержки.
Мы можем подойти к нему, как показано ниже для пользовательских тегов/тегов по умолчанию:
<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();}