テーブルに非常に多くの行が表示されるので、パフォーマンスを最適化したいです。仮想スクロール技術を使用して解決策を見つけました。 Angular Material CDK Vritual Scroll Viewport Component の例を以下に示します。シンプルなdiv
が見つかりました:
<cdk-virtual-scroll-viewport class="list-container lg" [itemSize]="52.5">
<div *cdkVirtualFor="let state of statesObservable | async;" class="list-group-item">
<div class="state">{{state.name}}</div>
<div class="capital">{{state.capital}}</div>
</div>
</cdk-virtual-scroll-viewport>
しかし、私はそれを Angular Material Table のように統合したい
<table mat-table [dataSource]="dataSource">
<ng-container *ngFor="let c of displayedColumns" [matColumnDef]="c">
<th mat-header-cell *matHeaderCellDef>{{getTitle(c)}}</th>
<td mat-cell style="white-space: pre-wrap;" *matCellDef="let element"> {{element[c]}}</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
私はそれをどのようにラップするのか疑問に思っていたcdk-virtual-scroll-viewport
からmat-table
。私のテーブルには最大1000行と20列以上が表示され、ロードとスクロール中のパフォーマンスはかなり遅くなります。
PS: Paginator を使用することで解決できることはわかっていますが、それはしたくありません。
"@angular/material": "^6.2.0"
@angular/cdk": "^6.2.0"
@angular/cdk-experimental": "^6.2.1"
"@angular/core": "6.0.3"
"@angular/cli": "6.0.7"
まだサポートされていません。しかし、一部の人々はいくつかのPOCをやろうとしました。 https://github.com/angular/material2/issues/10122#issuecomment-440442656 。
また、これには issue 仮想スクロールと、上記のPOCの仕組みについての議論があります。
これは現在すぐに使用できるものではありません。 CdkTable
(またはMatTable
)コンポーネントは仮想スクロールをサポートしていません[〜#〜] yet [〜#〜]。
@angular/cdk
に組み込まれた仮想スクロールのサポートはまだ実験段階です。これはバージョン7で変更されます。
ただし、この機能が実装されたら、次のステップはテーブルに実装することです...そしてその理由を説明します。
cdk-virtual-scroll-viewport
は*cdkVirtualFor
ディレクティブのコンテナです。このディレクティブ(CdkVirtualForOf
)を調べると、
1)ItimplementsCollectionViewer
( code )2)DataSource
インスタンス( code )
これを念頭に置いて、CdkTable
を見てみましょう。
1)ItimplementsCollectionViewer
( code )2)DataSource
インスタンス( code )
類似性は偶然ではなく、cdkVirtualFor
が使用されているように、cdk-virtual-scroll-viewport
がテーブルを(いくつかの調整を加えて)使用できます。
開発者が外部からテーブルをラップできるか、テーブルが内部で設定するかどうか、最終的な実装がどうなるかはわかりませんが、これはそうなる方向です。
推測しなければならなかった場合、開発者は仮想スクロールでテーブルをラップするかどうかを選択すると言います。これは、cdk-virtual-scroll-viewport
がcdkVirtualFor
を(ViewChild
を介して)クエリしないため、受動的で、何かがアタッチされるのを待つためです。事前に...
すぐにそれを行うことができます。CdkTable
を拡張して自分で調整を行うには、テーブルの内部を理解する必要があり、時間がかかる場合があります。少し待つことをお勧めします。