Renderer被弃用为renderer2的一个恩惠,替代`invokeElementMethod`?

end*_*smi 14 javascript renderer typescript angular

对于我的侧面项目,我想实现一个聊天流,其中新消息添加到底部,窗口应滚动到底部以显示最新消息.

为了做到这一点,我已经选择使用ViewChildren在组件上,找到最后消息(最新的),并使用scrollIntoViewnativeElement.

为了不通过直接访问DOM API来调用该方法nativeElement.scrollIntoView().我相信我需要使用renderer.invokeElementMethod(nativeElement, 'scrollIntoView').

问题是,renderer在赞成不赞成renderer2,我似乎无法找到一个方法替代invokeElementMethodrenderer2.

问题是,有没有一种我错过的方法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)

  • 我不知道这有10个赞成票.selectRootElement删除所选元素的所有子节点.它仅用于选择根角度元素,而不用于选择特定元素请参阅https://github.com/angular/angular/issues/19554#issuecomment-341848166 (2认同)