2016-11-21 4 views
2

Ich habe eine Liste mit 2 Spalten, ich will die linke, gerade Indizes und rechts zu ungerade anzeigen.Angular 2 ngFür über gerade/ungerade Artikel

Zur Zeit iteriere ich die ganze Liste für jede Spalte und filtere mit ngIf = "odd" oder even.

Kann ich ngFor nur machen und gerade oder ungerade Indizes beobachten?

Würde das die Leistung drastisch verbessern? Ich weiß nicht, wie viel von einer Last es ist, wenn die Hälfte der DOM-Elemente ng-out ist.

Die Liste ändert sich nicht häufig, aber wenn sie sich ändert, ändert sie sich vollständig.

+1

Bitte, zeigen den gesamten Code Sie verwenden. Wahrscheinlich müssen Sie das iterierte Array neu zuordnen. – estus

Antwort

3

Sie können ein Rohr erstellen, die nur zurückgibt odd oder even Artikel

@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); 
    } 
} 

und verwenden Sie es wie

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

einige Fehler '': 'erwartet. 'und' Kann den Namen 'item' nicht finden.' – Toolkit

+0

Danke für den Hinweis. Ich habe meine Antwort aktualisiert. Ich denke, es sollte jetzt funktionieren. Wenn Sie immer noch Fehler bekommen, bitte Provider mehr Details (Position des Fehlers und genaue Fehlermeldung). –

+0

Danke für das wirklich schöne Beispiel einer Pfeife! Ich musste die 7. Zeile wie folgt ändern, um es in Angular 4 laufen zu lassen: 'return value.filter ((item, idx) => {return filter === 'gerade'? Idx% 2 === 1: idx % 2 === 0;}); ' –

Verwandte Themen