我使用了角度CDK叠加,在我的叠加中,我有一些选项是通过虚拟滚动进行包裹,现在我想通过View Child访问我的组件中的虚拟滚动,但不断出现错误。我找不到任何解决方案。这是我的代码示例,
HTML:
<ng-template cdkConnectedOverlay cdkConnectedOverlayBackdropClass="cdk-overlay-transparent-backdrop" [cdkConnectedOverlayHasBackdrop]="true" [cdkConnectedOverlayOrigin]="trigger" [cdkConnectedOverlayOpen]="isMenuOpen" (detach)="isMenuOpen = false" (backdropClick)="isMenuOpen = false">
<cdk-virtual-scroll-viewport itemSize="50">
<mat-option style=";height: 50px;" (click)="optionClicked($event, data)" *cdkVirtualFor="let data of filteredData;">
<div (click)="optionClicked($event, data)">
<mat-checkbox [checked]="data.selected">
{{ data.skillName }}
</mat-checkbox>
</div>
</mat-option>
</cdk-virtual-scroll-viewport>
</ng-template>
TS:
@ViewChild(CdkVirtualScrollViewport) cdkVirtualScrollViewport: CdkVirtualScrollViewport;
ngAfterViewInit() {
this.cdkVirtualScrollViewport.elementScrolled().pipe(
map(() => this.cdkVirtualScrollViewport.measureScrollOffset('bottom')),
pairwise(),
filter(([y1, y2]) => (y2 < y1) && (y2 < 70)),
tap(() => this.isLoading = true),
switchMap((_) => {..API CALL..})).subscribe(...)
....
}
ERROR:
ERROR TypeError: Cannot read properties of undefined (reading 'elementScrolled')
at MultiselectAutocompleteComponent.ngAfterViewInit (multiselect-autocomplete.component.ts:212:36)
at callHook (core.mjs:2449:22)
at callHooks (core.mjs:2418:17)
at executeInitAndCheckHooks (core.mjs:2369:9)
at refreshView (core.mjs:10413:21)
at refreshComponent (core.mjs:11401:13)
at refreshChildComponents (core.mjs:10132:9)
at refreshView (core.mjs:10392:13)
at refreshEmbeddedViews (core.mjs:11355:17)
at refreshView (core.mjs:10366:9)
我想要AfterViewInit中的CDK虚拟滚动视图端口引用,这样我就可以获得底部滚动事件。因为我不想一次获取数千个响应,所以我想在用户到达底部时调用API。