当前位置: 首页 > 知识库问答 >
问题:

javascript - Vue2 中如何在App.vue中保证当前页面的所有子组件加载并渲染完毕才执行特定逻辑?

陈坚
2023-12-04

Vue2 中如何在App.vue中保证当前页面的所有子组件加载并渲染完毕才执行特定逻辑,测试mounted中并不能实现。

共有3个答案

陶宏浚
2023-12-04

需要等子组件渲染完毕才执行特定逻辑,说明父子组件具有很强的耦合。
可以使用provide/reject 来处理这种逻辑。
每渲染一个子组件调用add在父组件注册一个,在子组件渲染完毕后调用reject反馈给父组件,父组件监听注册列表全部渲染完毕,则执行特定逻辑。

这个方式也可以用状态管理实现pinia,vuex。但逻辑会复杂一些

魏襦宗
2023-12-04

可以在父组件中定义一个对象,记录各子组件的状态,监控该对象,所有子组件加载并渲染完毕才执行特定逻辑
父组件:
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'

},

申屠宗清
2023-12-04

你可以尝试使用Vue.nextTick()

什么是Vue.nextTick()??

定义:在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。

所以就衍生出了这个获取更新后的DOM的Vue方法。所以放在Vue.nextTick()回调函数中的执行的应该是会对DOM进行操作的 js代码;

理解:nextTick(),是将回调函数延迟在下一次dom更新数据后调用,简单的理解是:当数据更新了,在dom中渲染后,自动执行该函数

   created() {      this.$nextTick(()=>{        this.$refs.str.value = '西瓜'        }      )    },
 类似资料:
  • 我试图在呈现组件之前从API加载事件。目前我正在使用我的API服务,我从组件的ngOnInit函数调用该服务。 我的组件: 我的模板 我的API服务 组件在函数中的API调用完成获取数据之前呈现。所以我从来没有看到我的视图模板中的事件ID。所以看起来这是一个ASYNC问题。我期望在设置了属性后,绑定(组件)来完成一些工作。可悲的是,当属性被设置时,它不显示用标记的。 问:我用的方法好吗?如果没有;

  • 本文向大家介绍详解angular中如何监控dom渲染完毕,包括了详解angular中如何监控dom渲染完毕的使用技巧和注意事项,需要的朋友参考一下 刚刚看到群上一个人说,他们公司凡是用angular和jquery插件一起用的人,都被解雇了,没看到这句话之前我很惭愧的说我有这样用过,其实angular的生态系统那么完善,完全可以不用去操作任何的dom元素都可以满足你的提倡开发需求。 那么如果真的需要

  • Vue2 如何获取router-view当前渲染的实例,在不重新实例化的前提下,渲染到新的组件里面? 当前思路是: 可以拿到当前渲染的路由route对象,route对象里面有matched匹配到组件以及该组件的实例instaces, 可以拿到$vnode虚拟dom, 有了虚拟dom之后,通过抽象组件动态把该实例的$vnode,重新渲染到新的组件 这里遇到了问题, 比如在新的组件A重新渲染fuWuT

  • 所以基本上我有一个导航栏,可以在路线之间切换。当页面加载时,默认情况下会转到/home,但实际上不会呈现所提供的应用程序组件。我必须单击将您带到/主页的按钮才能渲染此内容。 我使用Redux的反应路由器。 这是我的浏览器路由器: 有什么建议吗?

  • 问题内容: 我正在使用inside 执行外部脚本。 现在,由于脚本是 在 页面加载 之前 执行的,因此我无法访问。在文档“加载”后(HTML已完全下载并在RAM中),我想执行一些JavaScript。执行脚本时,是否有任何我可以挂上的事件,这些事件将在页面加载时触发? 问题答案: 这些解决方案将起作用: 要么 甚至 请注意, 最后一个选项是更好的选择,因为它不引人注目并且被[认为是更标准的。

  • 问题内容: 我正在使用Selenium python Webdriver来浏览某些页面。我想在加载和执行任何其他Javascript代码之前向页面中注入JavaScript代码。另一方面,我需要将我的JS代码作为该页面的第一个JS代码执行。Selenium有办法做到吗? 我用谷歌搜索了几个小时,但找不到合适的答案! 问题答案: 如果您无法修改页面内容,则可以使用代理或在浏览器中安装的扩展程序中使用