Vue2 中如何在App.vue中保证当前页面的所有子组件加载并渲染完毕才执行特定逻辑?
Vue2 中如何在App.vue中保证当前页面的所有子组件加载并渲染完毕才执行特定逻辑,测试mounted中并不能实现。
回答:
你可以尝试使用Vue.nextTick()
什么是Vue.nextTick()??
定义:在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。
所以就衍生出了这个获取更新后的DOM的Vue方法。所以放在Vue.nextTick()回调函数中的执行的应该是会对DOM进行操作的 js代码;
理解:nextTick(),是将回调函数延迟在下一次dom更新数据后调用,简单的理解是:当数据更新了,在dom中渲染后,自动执行该函数
created() { this.$nextTick(()=>{
this.$refs.str.value = '西瓜'
}
)
},
回答:
可以在父组件中定义一个对象,记录各子组件的状态,监控该对象,所有子组件加载并渲染完毕才执行特定逻辑
父组件:
watch: {
stateObj: { handler(n, o) {
if (n && n.children1 == 'mounted' && n.children2 == 'mounted') {
// 执行特定逻辑
}
},
deep: true,
immediate: true
},
},
data() {
return { stateObj: {
children1: '',
children2: '',
}
}
},
子组件:
mounted() {
this.$parent.stateObj.children1 = 'mounted'
},
回答:
需要等子组件渲染完毕才执行特定逻辑,说明父子组件具有很强的耦合。
可以使用provide/reject 来处理这种逻辑。
每渲染一个子组件调用add在父组件注册一个,在子组件渲染完毕后调用reject反馈给父组件,父组件监听注册列表全部渲染完毕,则执行特定逻辑。
这个方式也可以用状态管理实现pinia,vuex。但逻辑会复杂一些
以上是 Vue2 中如何在App.vue中保证当前页面的所有子组件加载并渲染完毕才执行特定逻辑? 的全部内容, 来源链接: utcz.com/p/935200.html