【发布时间】:2021-04-24 03:06:51
【问题描述】:
在一个 Vuejs 应用程序中,我有一个组件 A,它管理组件 B 的实例。当 A 挂载时,它会遍历一个列表,从中创建 B 组件。当它迭代时,A 创建了一个 B 的新实例,然后它需要知道 B 模板中特定 div 元素的高度,然后 B 才真正安装到 DOM 中(是的,我知道)。 A 然后根据高度决定如何处理 B 实例。
我尝试了这种方法,其想法是将 B 实例安装到 DOM,如果它太高,然后将其删除:
答:
for(let i = 0; i < bData.length; i++) {
const bInstance = new B();
this.bInstances.push(bInstance);
this.$nextTick(() => {
const height = bInstance.getHeight();
if(height < 100) {
//...
} else {
//...
}
});
}
乙:
getHeight() {
const divContent = this.$refs.divContent;
return divContent.clientHeight;
}
我这里有两个问题;首先,我需要等待第一个 B 实例被安装以知道高度,然后 A 继续下一个 B 项目。有点像等待功能。但是循环当然不会等待 netTick 完成。 其次,调用B的getHeight函数时,$refs对象为空?如果我在 B 中的挂载函数中设置超时,则 $refs 可用。怎么会?
我想我没有正确解决问题。有什么想法吗?
【问题讨论】:
-
太高了为什么要去掉?无论如何,如果你想这样做,你可以在 B 组件的 props 中添加一个布尔值,然后在 A 组件中创建 B 组件时将其绑定到 A 组件中的 prop 也可以循环遍历 B 组件中所需的数据在A组件中挂载时直接在带有vueJs v-for属性的div中,它可以更轻松地处理数据和属性