我想将 CdkVirtualScrollViewport 与 *ngIf 构造的内部部分一起使用 - 这是我的模板:
<div *ngIf="noScroll; else virtscroll" class="example-viewport">
<span>Something others</span>
</div>
<ng-template #virtscroll>
<cdk-virtual-scroll-viewport class="example-viewport">
<table class="table" mat-table [dataSource]="virtScrollDataSource">
...
</table>
</cdk-virtual-scroll-viewport>
</ng-template>
最初是 noscroll=false,所以虚拟滚动视图将被渲染并且滚动工作完美,我可以滚动我在表数据源中设置的所有 200 行。我的问题是:在从 virtual-scroll-view 切换到 noscroll-view 并再次切换回 virtual-scroll-view 之后(例如将 noscroll 条件从 false 更改为 true 并返回到 false),cdk-virtual-scroll-viewport 呈现只有“可见”行,并且不提供对表的所有 200 行的完全滚动可能性。我认为,这种行为的原因是,在切换到 noscroll-view 时,CdkVirtualScrollViewport 关闭了他对视口更改的内部订阅:他的内部成员 _viewportChanges.closed=true 并且在切换回虚拟滚动视图后,这个状态仍然存在关闭。
要切换到虚拟滚动视图:我将滚动偏移量重置为 0,设置视图的完整内容大小并设置可见行:
this.viewport.scrollToOffset(0);
this.viewport.setTotalContentSize(this.itemSize * data.length);
this.visibleData.next(data.slice(0, PAGESIZE));
我还应该做什么?
这是我的示例代码的 Stackblitz 链接(请耐心等待,此代码仅用于演示我的问题):
任何帮助将不胜感激 !