2016-11-21 3 views
2

У меня есть список с 2 столбцами, я хочу, чтобы слева отображались даже индексы и право на нечетные.Угловая 2 ngFor над четными/нечетными элементами

В настоящее время я повторяю весь список для каждого столбца и фильтрую его с помощью ngIf = "odd" или даже.

Могу ли я сделать ngFor только делать и смотреть четные или нечетные индексы?

Будет ли это улучшать производительность? Я не знаю, сколько издержек это, когда половина элементов DOM является ng-if'ed.

Список не меняется часто, но когда он изменяется, он полностью изменяется.

+1

Пожалуйста, покажите весь код, который вы используете. Скорее всего, вам понадобится переназначить итерированный массив. – estus

ответ

3

Вы можете создать канал, который только возвращает odd или even элементы

@Pipe({ name: 'evenodd' }) 
export class EvenOddPipe implements PipeTransform { 
    transform(value:any[], filter:string) { 
    if(!value || (filter !== 'even' && filter !== 'odd')) { 
     return value; 
    } 
    return value.filter((item, idx) => filter === 'even' ? idx % 2 === 1 : idx % 2 === 0); 
    } 
} 

и использовать его как

<div *ngFor="let item of items | evenodd:'even'"></div>  
<div *ngFor="let item of items | evenodd:'odd'"></div> 
+0

ожидается пара ошибок '':'. 'и' Не могу найти имя 'item'.' – Toolkit

+0

Спасибо за подсказку. Я обновил свой ответ. Думаю, теперь это должно сработать. Если вы все еще получаете ошибки, обратитесь к поставщику за дополнительной информацией (положение ошибки и точное сообщение об ошибке). –

+0

Спасибо за этот действительно хороший пример трубы! Мне пришлось изменить строку 7. следующим образом, чтобы запустить ее в Angular 4: 'return value.filter ((item, idx) => {return filter === 'even'? Idx% 2 === 1: idx % 2 === 0;}); ' –