Angular nAfterViewChecked卡在循环上

Angular nAfterViewChecked卡在循环上,angular,typescript,Angular,Typescript,我试图让从底部开始,它可以工作,但我似乎无法向上滚动 我想这是因为检查了AfterViewChecked,我尝试了AfterViewInit,但它似乎不起作用 @ViewChild(CdkVirtualScrollViewport, { static: false }) viewport: CdkVirtualScrollViewport; ngAfterViewChecked() { this.viewport.scrollTo({ bottom: 0 }); } {{message

我试图让
从底部开始,它可以工作,但我似乎无法向上滚动

我想这是因为检查了
AfterViewChecked
,我尝试了
AfterViewInit
,但它似乎不起作用

@ViewChild(CdkVirtualScrollViewport, { static: false }) viewport: CdkVirtualScrollViewport;

ngAfterViewChecked() {
  this.viewport.scrollTo({ bottom: 0 });
}

{{message}}

如何再次向上滚动?或者只需使用AfterViewChecked执行一次
AfterViewChecked

,每次视图更改完成后,列表都会向下滚动

您可以尝试使用ViewChild setter,只有在子项准备就绪时才会调用它

@ViewChild(CdkVirtualScrollViewport, { static: false }) 
set viewport(viewport: CdkVirtualScrollViewport) {
   viewport.scrollTo({ bottom: 0 });
}

每次视图更改完成后,使用AfterViewChecked将导致列表向下滚动

您可以尝试使用ViewChild setter,只有在子项准备就绪时才会调用它

@ViewChild(CdkVirtualScrollViewport, { static: false }) 
set viewport(viewport: CdkVirtualScrollViewport) {
   viewport.scrollTo({ bottom: 0 });
}

似乎问题在于该组件必须保持渲染,因此触发setter。如果你试一下,它会起作用吗?我在stack blitz上试用过,效果不错。ngAfterViewInit(){setTimeout(()=>viewport.scrollTo({bottom:0}));}类似的方法可以工作,但看起来非常糟糕。加载=错误@ViewChild(CdkVirtualScrollViewport,{static:false})set viewport(viewport:CdkVirtualScrollViewport){if(!this.loaded){viewport.scrollTo({bottom:0});this.loaded=!!viewport.getrenderRange().end;}}组件将首先在没有子对象的情况下渲染,这就是NgaftViewInit不起作用的原因。添加超时将在呈现子对象后触发滚动。
load=false@ViewChild(CdkVirtualScrollViewport,{static:false})set viewport(viewport:CdkVirtualScrollViewport){if(!this.loaded){viewport.scrollTo({bottom:0});this.loaded=!!viewport.getrenderRange().end;}
有效!谢谢。问题似乎是该组件必须保持渲染,因此触发setter。如果你试一下,它会起作用吗?我在stack blitz上试用过,效果不错。ngAfterViewInit(){setTimeout(()=>viewport.scrollTo({bottom:0}));}类似的方法可以工作,但看起来非常糟糕。加载=错误@ViewChild(CdkVirtualScrollViewport,{static:false})set viewport(viewport:CdkVirtualScrollViewport){if(!this.loaded){viewport.scrollTo({bottom:0});this.loaded=!!viewport.getrenderRange().end;}}组件将首先在没有子对象的情况下渲染,这就是NgaftViewInit不起作用的原因。添加超时将在呈现子对象后触发滚动。
load=false@ViewChild(CdkVirtualScrollViewport,{static:false})set viewport(viewport:CdkVirtualScrollViewport){if(!this.loaded){viewport.scrollTo({bottom:0});this.loaded=!!viewport.getrenderRange().end;}
有效!非常感谢。