Vue3 中不再支持 window.onload
,这是因为 Vue3 使用了新的生命周期钩子函数,如 onMounted
,onUpdated
,onUnmounted
等,来替代了 Vue2 中的 mounted
,updated
,destroyed
以及全局的 window.onload
,window.onbeforeunload
等。
在你的代码中,window.onload
没有执行,可能是因为 Vue3 已经接管了应用的生命周期,并且不再触发全局的 window.onload
事件。
对于你的需求,你可以在 Vue3 的 onMounted
生命周期钩子函数中关闭 loading。因为 onMounted
会在实例被挂载到 DOM 后调用,这时你可以认为页面已经完全加载完成。nextTick
在这里不是必需的,因为 onMounted
已经确保了在 DOM 更新后执行。
以下是一个示例:
import { ref, onMounted } from 'vue'
export default {
setup() {
const isLoading = ref(true) // 初始化一个响应式变量来控制 loading 的显示和隐藏
onMounted(() => {
console.log('mounted')
isLoading.value = false // 在组件挂载后关闭 loading
})
return {
isLoading // 返回 isLoading 变量,以便在模板中使用
}
}
}
在模板中,你可以根据 isLoading
的值来决定是否显示 loading:
<template>
<div v-if="isLoading">Loading...</div>
<!-- 其他内容 -->
</template>
这样,当组件挂载后,loading 就会自动关闭。
你onload只有写在入口main.js内才有效。否则其他控件内都已经在onload之后了。所以在组件内是不会触发onload事件的。在vue组件中只能使用$nextTick来确保组件挂载完毕之后执行。