在 Vue.js 中,组件被销毁是指组件从 DOM 中被移除,并且相关的资源和引用被清理。以下是组件被销毁的几种常见情况:
1. 动态组件切换
当使用 v-if
或 v-for
等指令动态切换组件时,组件会被销毁。例如:
vue
<template>
<div>
<button @click="showComponent = !showComponent">
切换组件
</button>
<component-a v-if="showComponent" />
</div>
</template>
<script>
import ComponentA from './ComponentA.vue';
export default {
components: {
ComponentA
},
data() {
return {
showComponent: true
};
}
};
</script>
- 当
showComponent
为false
时,ComponentA
会被销毁,其beforeUnmount
钩子会被触发。
2. 路由切换
当使用 Vue Router 进行页面跳转时,当前路由组件会被销毁。例如:
vue
<template>
<div>
<router-link to="/home">Home</router-link>
<router-link to="/about">About</router-link>
<router-view />
</div>
</template>
- 当从
/home
跳转到/about
时,/home
对应的组件会被销毁,其beforeUnmount
钩子会被触发。
3. 整个应用卸载
当整个 Vue 应用被卸载时,所有组件都会被销毁。例如:
javascript
const app = Vue.createApp(App);
const vm = app.mount('#app');
// 卸载整个应用
vm.unmount();
- 调用
vm.unmount()
会触发所有组件的beforeUnmount
钩子。
4. 关闭页面
当用户关闭浏览器标签页或刷新页面时,整个 Vue 应用会被销毁,所有组件的 beforeUnmount
钩子都会被触发。
5. 跳转页面
- 单页面应用(SPA):如果使用 Vue Router 进行页面跳转,当前页面的组件会被销毁。
- 传统页面跳转 :如果使用
<a>
标签或window.location.href
进行页面跳转,浏览器会加载新页面,旧页面的所有组件都会被销毁。
总结
组件被销毁的情况包括:
- 动态组件切换(如
v-if
或v-for
)。 - 路由切换(使用 Vue Router)。
- 整个应用卸载。
- 关闭页面或刷新页面。
- 跳转页面(无论是 SPA 还是传统页面跳转)。
在这些情况下,Vue 会自动调用组件的 beforeUnmount
和 unmounted
生命周期钩子,用于执行清理操作。