<body style="text-align: center">
<script src='https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js'></script>
<div id='myApp'>
<a href="#" @click="page1='main'">主页</a>
<a href="#" @click="page1='login'">登录页</a>
<a href="#" @click="page1='user'">个人页</a>
<my-com1 v-show="page1=='main'"></my-com1>
<my-com2 v-show="page1=='login'"></my-com2>
<my-com3 v-show="page1=='user'"></my-com3>
<hr> 以下是动态组件写法<hr>
<a href="#" @click="page2='my-com1'">主页</a>
<a href="#" @click="page2='my-com2'">登录页</a>
<a href="#" @click="page2='my-com3'">个人页</a>
<component :is="page2"></component>
</div>
<script>
Vue.component('myCom1', { template: "<h1>这是主页</h1>" })
Vue.component('myCom2', { template: "<h1>登陆注册</h1>" })
Vue.component('myCom3', { template: "<h1>个人中心</h1>" })
new Vue({
el: '#myApp',
data: {
page1: "main",
page2: "myCom1"
},
methods: {
}
})
</script>
</body>
keep-alive
keep-alive会缓存组件中的数据,当组件重新展示时,渲染缓存的数据
默认情况下, 动态组件切换会伴随组件的创建和销毁, 当动态组件被keepAlive包裹后, 组件只会在第一次显示时创建, 组件切换时,不会再销毁和重建, 也就不会再调用created和destroyed生命周期函数
当添加了keepAlive后, 在组件切换时, 会执行两个新的生命周期函数activated 和 deactivated, 它们依赖于keepAlive
<body style="text-align: center">
<script src='https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js'></script>
<div id='myApp'>
<a href="#" @click="page2='my-com1'">主页</a>
<a href="#" @click="page2='my-com2'">登录页</a>
<a href="#" @click="page2='my-com3'">个人页</a>
<!-- 动态组件切换类似于v-if切换, 会将组件创建和销毁 -->
<!-- <component :is="page2"></component> -->
<!-- 而且组件间不存在重用机制, 所以表单中的数据在组件切换时会丢失 -->
<!-- 如果想在组件切换时保留表单数据, 可以使用keep-alive -->
<keep-alive>
<component :is="page2"></component>
</keep-alive>
</div>
<script>
Vue.component('myCom1', { template: "<h1>这是主页<input></h1>" })
Vue.component('myCom2', { template: "<h1>登陆注册<input></h1>" })
Vue.component('myCom3', {
template: "<h1>个人中心<input></h1>" ,
created() {
console.log("个人中心页被创建")
},
destroyed() {
console.log("个人中心页被销毁")
},
activated() {
console.log("个人中心页进入活跃状态, 即组件显示")
},
deactivated() {
console.log("个人中心页进入非活跃状态, 即组件隐藏")
}
})
new Vue({
el: '#myApp',
data: {
page1: "main",
page2: "myCom1"
},
methods: {
}
})
</script>
</body>