2017-05-13 3 views
0

Ich habe eine Liste von Einträgen, die ich durchschlinge, und für jeden Eintrag, den ich habe, füge ich eine Zeile zu einer Tabelle hinzu. Ich habe ungefähr 2000 Einträge, daher dauert es eine Sekunde, bis die Tabelle gerendert wird. Wie würde ich das auf 50 oder 100 beschränken?Angular 4 - Begrenzte Anzahl der angezeigten Tabellenzeilen

<ng-container *ngFor="let entry of entries"> 
    <tr *ngIf="entry['name'].startsWith(filter)"> 
    <td>{{ entry.name }}</td> 
    </tr> 
</ng-container> 

Diese Frage unterscheidet sich von this one, weil ich immer noch die Zeilen will dabei sein, ich will nur nur 100 zu einer Zeit gezeigt werden.

+0

wenn der Grenzwert konstant ist, warum nicht nur begrenzt Ergebnis aus der Abfrage gesetzt zurückkehren? – Haris

+0

@Haris Ich möchte, dass alle Daten durch den Filter gefunden werden können. Ich möchte nur die ersten 2000, bevor Sie mit der Suche beginnen. –

+0

Mögliches Duplikat von [Wie kann ich ngFor auf 10 Elemente in Angular 2 beschränken? ] (http://stackoverflow.com/questions/37818677/how-can-i-limit-ngfor-repeat-to-10-items-in-angular-2) – Matt

Antwort

1

Ich empfehle Ihnen, eine pipe zu Filter die Elemente nach Name, die mit einem bestimmten Zeichen beginnt.

Kann so etwas wie dieses:

@Pipe({ 
    name: 'startsWith' 
}) 
export class StartsWithPipe implements PipeTransform { 

    transform(items: any[], prop: string, term: string): any[] { 
    if (!Array.isArray(items) || !term) { 
     return items; 
    } 

    const strTerm: string = term.toLowerCase(); 

    return items.filter(item => { 
     return item[prop] && item[prop].toLowerCase().startsWith(strTerm); 
    }); 
    } 
} 

Also, in Vorlage, Sie kombinieren die startsWithRohr mit SlicePipe:

<div *ngFor="let item of items | startsWith: 'name': nameFilter | slice: 0: limit"> 
    {{item.name}} 
</div> 

Beachten Sie, dass nameFilter und limit Variablen sind.

DEMO

+1

Vielen Dank, das Demo hat wirklich geholfen. –

Verwandte Themen