代码
提交代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <div id="app"> <keep-alive include="ComponentA,ComponentB"> <component :is="currentView"></component> </keep-alive> <button @click="changeView('A')">切换到A</button> <button @click="changeView('B')">切换到B</button> <button @click="changeView('C')">切换到C</button> </div> </body> <script src="https://unpkg.com/vue/dist/vue.js"></script> <script type="text/javascript"> Vue.component('ComponentA', { template: '<div> 组件 A </div>', created() { console.log('组件A created') }, activated() { console.log('组件A 被添加') }, deactivated() { console.log('组件A 被移除') } }) Vue.component('ComponentB', { template: '<div> 组件 B </div>', created() { console.log('组件B created') }, activated() { console.log('组件B 被添加') }, deactivated() { console.log('组件B 被移除') } }) Vue.component('ComponentC', { template: '<div> 组件 C </div>', created() { console.log('组件C created') }, activated() { console.log('组件C 被添加') }, deactivated() { console.log('组件C 被移除') } }) var vm = new Vue({ el: '#app', data() { return { currentView: 'ComponentB' } }, methods: { changeView(name) { this.currentView = `Component${name}` } } }) </script> </html>
运行结果