end*_*smi 14 javascript renderer typescript angular
对于我的侧面项目,我想实现一个聊天流,其中新消息添加到底部,窗口应滚动到底部以显示最新消息.
为了做到这一点,我已经选择使用ViewChildren在组件上,找到最后消息(最新的),并使用scrollIntoView上nativeElement.
为了不通过直接访问DOM API来调用该方法nativeElement.scrollIntoView().我相信我需要使用renderer.invokeElementMethod(nativeElement, 'scrollIntoView').
问题是,renderer在赞成不赞成renderer2,我似乎无法找到一个方法替代invokeElementMethod的renderer2.
问题是,有没有一种我错过的方法renderer2呢?或者我们现在有一种新的方法来调用元素方法?
小智 14
您可以使用Renderer2的selectRootElement方法.
例如:
constructor(private renderer: Renderer2) {}
this.renderer.selectRootElement('#domElementId').scrollIntoView()
Run Code Online (Sandbox Code Playgroud)
,其中domElementId在你的html中是id ='domElementId'
UPDATE
根据Angular的官方文档为selectRootElement提供第二个参数,因为它用于保存您的内容
selectRootElement(selectorOrNode: any, preserveContent?: boolean): any
this.renderer
.selectRootElement'#domElementId', true) // Supply true for the 2nd arg to make sure your content is preserved.
.scrollIntoView() // Or ({ behavior: 'smooth' }) for smooth scrolling
Run Code Online (Sandbox Code Playgroud)