我在 Angular 7 中使用虚拟滚动。我创建了一个CdkVirtualScrollViewport
并且我会为每个滚动事件添加一个侦听器。我的意思是我希望在该视口内滚动时收到通知。
我试图注入scrollDispatcher
我的组件,但我看到它scrolled()
是在整个组件上滚动时触发的,然后我发现它是绑定到组件而不是绑定到CdkVirtualScrollViewport
.
这是我的代码:
@ViewChild(CdkVirtualScrollViewport) virtualScroll: CdkVirtualScrollViewport;
items: Array<any>;
constructor(private scrollDispatcher: ScrollDispatcher, private cd: ChangeDetectorRef) {
this.items = [];
}
ngOnInit(): void {
for (let i = 0; i < 100; i++) {
this.items.push(i);
}
}
ngAfterViewInit(): void {
this.scrollDispatcher.scrolled()
.subscribe(event => {
console.log('scrolled');
});
}
如您所见CdkVirtualScrollViewport
,我的组件中有一个子元素:
<div class="header">
{{header}}
</div>
<div class="container">
<cdk-virtual-scroll-viewport itemSize="4" class='example-viewport'>
<li *cdkVirtualFor="let item of items" class='example-item' >{{item}}</li>
</cdk-virtual-scroll-viewport>
</div>
<div class="footer">
{{footer}}
</div>
这是完整的代码:https ://stackblitz.com/edit/angular7-scroll-dispatcher
也许我可以使用...register()
的方法,scrollDispatcher
但我应该将 a 传递CdkScrollable
给它,而不是我的CdkVirtualScrollViewport
元素。
那么,我怎样才能只听我的虚拟滚动视口滚动事件呢?