angular 9获取渲染异步数据完成后的dom节点
在学习angular的过程中,遇到过要根据情况操作dom节点。通常在初始化的时候会遇到一种情况,就是dom还没有将异步获取的数据渲染的时候。即使是ngAfterViewInit() 也同样获取不到dom的属性以及里面NgFor渲染的节点。百度出来的结果基本上都是文档上讲解基础的。并没有指出究竟如何获取。自学之路充满坎坷,在我在多次查阅文档之后终于找到了解决方案。希望能帮助更多的学习者。
@ViewChild()一般使用为
@ViewChild('dom') dom;
但是这样获取的dom节点是不会动态更新的,即使设置了{static :false}.其实就是默认值。
必须使用set()和get()才能获取及时更新之后的dom。
例子如下:
private _Pane;
@ViewChild(Pane)
set pane(v: Pane) {
this._Pane = v;
this.selectedPane = v.id;
//执行一些获取需求的操作。例如dom的clientHeight
}
get(){//可以不需要,根据上下文中是否需要使用Pane参数选择
return this._Pane
}
里面的值都是响应式更新的,在dom重新渲染之后会再次执行。特别是使用ngFor渲染异步数据的时候,又想在初始化阶段获取dom里面的一些属性的时候,使用常规的方法并不能满足需求。即使是使用load的监听事件去操作,在不刷新页面的情况下,也还是不能满足需求的。
还是要发发牢骚,官方文档有给出如此类似的使用方法,但是并不友好。讲解的例子过于简单,解释说明也不是很清楚。让我百度都找不出解决方案。