2017-05-13 10 views
0

私はループしているエントリのリストを持っています。それぞれのエントリは、テーブルに行を追加しています。私は約2000のエントリを持っているので、テーブルをレンダリングするのに1秒かかる。私はどのようにこれを50か100に制限しますか?角4 - 表示されるテーブル行の数が制限されます

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

私はまだ行が、私はちょうど唯一100を一度に表示したいそこになりたいので、この質問はthis oneは異なっています。

+0

制限が一定であれば、なぜ単にクエリから限定された結果セットを返しませんか? – Haris

+0

@ハリスフィルターを使ってすべてのデータを見つけることができます。検索を開始する前に最初の2000年が欲しいのではない –

+0

[ngFor repeatをAngular 2の10項目に制限するにはどうすればよいですか? ](http://stackoverflow.com/questions/37818677/how-can-i-limit-ngfor-repeat-to-10-items-in-angular-2) – Matt

答えて

1

pipeフィルタを指定すると、特定の文字で始まる項目が作成されることをお勧めします。

はこのようなものになることができます:nameFilterlimitが変数であることを

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

注:だから

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

、テンプレートでは、あなたはSlicePipestartsWithパイプを兼ね備えています。

DEMO

+1

ありがとう、デモが本当に助けてくれました。 –

関連する問題