angular 7 cdkの仮想スクロールがマットタブグループで異常に機能するという問題が発生しましたか?.
https://github.com/angular/material2/issues/13981
私の都市コンポーネントテンプレートはそのように見えます
<cdk-virtual-scroll-viewport class="list-container" [itemSize]="50" minBufferPx="200" maxBufferPx="400" (scrolledIndexChange)="getNextBatch($event)">
<div *cdkVirtualFor="let state of statesObservable | async; trackBy: trackByFn" class="list-group-item state-item">
<div class="state">{{state.name}}</div>
<div class="capital">{{state.capital}}</div>
</div>
</cdk-virtual-scroll-viewport>
この都市コンポーネントを2番目のタブとしてmat-tab-groupに配置すると
<mat-tab-group>
<mat-tab label="Country">
<app-country></app-country>
</mat-tab>
<mat-tab label="City">
<app-city></app-city>
</mat-tab>
</mat-tab-group>
Stackblitzコードは次のとおりです: https://stackblitz.com/edit/angular7-virtual-scroll-issue
誰かがこの問題について何か考えを持っていますか?
matTabContent
属性を使用してng-template
で本体を宣言することにより、タブコンテンツを遅延ロードする必要があります。このように、ビューポートのサイズは、タブが表示されている場合にのみ計算されます。
<mat-tab label="City">
<ng-template matTabContent>
<app-city></app-city>
</ng-template>
</mat-tab>
参照: https://material.angular.io/components/tabs/overview#lazy-loading
少し前に質問されましたが、回避策ではない解決策があります。
まず、ビューポートリファレンスが必要です。
_@ViewChild(CdkVirtualScrollViewport, {static: false}) cdkVirtualScrollViewport: CdkVirtualScrollViewport;
_
次に、ビューポートのサイズが変更されたときに、メソッドcheckViewportSize()
を呼び出すことができます。このメソッドを呼び出す前に、ビューポートコンテナーのスタイルの高さを更新する必要があります。
_this.heightChange$.subscribe(() => {
this.cdkVirtualScrollViewport.checkViewportSize();
});
_
私のために働く、ありがとう!
@ViewChild(CdkVirtualScrollViewport) viewport: CdkVirtualScrollViewport;
@HostListener('window:resize', ['$event'])
onResize(event) {
this.viewport.checkViewportSize();
}