过程
在开发项目中遇到了一个问题,需要获取一个节点中的直接子节点。
操作:mounted中使用$refs获取该HTMLCollection,this.$refs['node'].children
。
打印该HTMLCollection可以读取数组队列,却无法读取该数组长度。
查看文档:
1、MDN-HTMLCollection
2、vue.js-mounted
问题:mounted 不会承诺所有的子组件也都一起被挂载....
然后使用文档说明:this.$nextTick
,然后,额没有效果.....
然后使用最尴尬的方式:setTimeout
,有效了.....
简短的答案。
假设一种例外情况。在你的组件中,包含一个异步组件。因为异步组件一定不会第一时间实例化,自然无法保证子组件节点挂载。
详细的答案。
因为生命周期属于组件,所以当虚拟DOM树对比完后,只会对此组件的虚拟DOM树要更新的部分做更新。而子组件在虚拟DOM树中,只知道子组件的构造器(Ctor),传入的数据(data)和子项(children)有没有变化,不关心子组件内部的虚拟DOM树。因此,只能保证这个组件要去渲染它的子组件,却无法保证它的子组件内部是如何渲染的。