1. <body style="text-align: center">
  2. <script src='https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js'></script>
  3. <div id='myApp'>
  4. <a href="#" @click="page1='main'">主页</a>
  5. <a href="#" @click="page1='login'">登录页</a>
  6. <a href="#" @click="page1='user'">个人页</a>
  7. <my-com1 v-show="page1=='main'"></my-com1>
  8. <my-com2 v-show="page1=='login'"></my-com2>
  9. <my-com3 v-show="page1=='user'"></my-com3>
  10. <hr> 以下是动态组件写法<hr>
  11. <a href="#" @click="page2='my-com1'">主页</a>
  12. <a href="#" @click="page2='my-com2'">登录页</a>
  13. <a href="#" @click="page2='my-com3'">个人页</a>
  14. <component :is="page2"></component>
  15. </div>
  16. <script>
  17. Vue.component('myCom1', { template: "<h1>这是主页</h1>" })
  18. Vue.component('myCom2', { template: "<h1>登陆注册</h1>" })
  19. Vue.component('myCom3', { template: "<h1>个人中心</h1>" })
  20. new Vue({
  21. el: '#myApp',
  22. data: {
  23. page1: "main",
  24. page2: "myCom1"
  25. },
  26. methods: {
  27. }
  28. })
  29. </script>
  30. </body>

keep-alive

keep-alive会缓存组件中的数据,当组件重新展示时,渲染缓存的数据
默认情况下, 动态组件切换会伴随组件的创建和销毁, 当动态组件被keepAlive包裹后, 组件只会在第一次显示时创建, 组件切换时,不会再销毁和重建, 也就不会再调用created和destroyed生命周期函数
当添加了keepAlive后, 在组件切换时, 会执行两个新的生命周期函数activated 和 deactivated, 它们依赖于keepAlive

  1. <body style="text-align: center">
  2. <script src='https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js'></script>
  3. <div id='myApp'>
  4. <a href="#" @click="page2='my-com1'">主页</a>
  5. <a href="#" @click="page2='my-com2'">登录页</a>
  6. <a href="#" @click="page2='my-com3'">个人页</a>
  7. <!-- 动态组件切换类似于v-if切换, 会将组件创建和销毁 -->
  8. <!-- <component :is="page2"></component> -->
  9. <!-- 而且组件间不存在重用机制, 所以表单中的数据在组件切换时会丢失 -->
  10. <!-- 如果想在组件切换时保留表单数据, 可以使用keep-alive -->
  11. <keep-alive>
  12. <component :is="page2"></component>
  13. </keep-alive>
  14. </div>
  15. <script>
  16. Vue.component('myCom1', { template: "<h1>这是主页<input></h1>" })
  17. Vue.component('myCom2', { template: "<h1>登陆注册<input></h1>" })
  18. Vue.component('myCom3', {
  19. template: "<h1>个人中心<input></h1>" ,
  20. created() {
  21. console.log("个人中心页被创建")
  22. },
  23. destroyed() {
  24. console.log("个人中心页被销毁")
  25. },
  26. activated() {
  27. console.log("个人中心页进入活跃状态, 即组件显示")
  28. },
  29. deactivated() {
  30. console.log("个人中心页进入非活跃状态, 即组件隐藏")
  31. }
  32. })
  33. new Vue({
  34. el: '#myApp',
  35. data: {
  36. page1: "main",
  37. page2: "myCom1"
  38. },
  39. methods: {
  40. }
  41. })
  42. </script>
  43. </body>