• vue——组件高级之动态组件、缓存组件、异步组件


     一、v-if 切换组件

      父组件App.vue:

    1. <script>
    2. import Box1 from "./Box1.vue";
    3. import Box2 from "./Box2.vue";
    4. import Box3 from "./Box3.vue";
    5. export default {
    6. data() {
    7. return {
    8. arr:[false,false,false]
    9. };
    10. },
    11. methods: {
    12. fn(index) {
    13. this.arr.fill(false)
    14. console.log("点击了box"+(index+1))
    15. this.$set(this.arr,index,true)
    16. }
    17. },
    18. components: {
    19. Box1,
    20. Box2,
    21. Box3
    22. }
    23. };
    24. script>

      子组件 Box1.vue   Box2.veu  Box3.vue文件 类似:

    1. <script>
    2. export default {}
    3. script>

     结果显示:

    二、动态组件:

    component 标签的 is属性

    语法:is后跟组件的变量名决定使用哪个组件来渲染

    两种写法:

    •    代表==>

    注意: is是组件名  :is是data中的变量中保存的组件名

      父组件App.vue:

    1. <script>
    2. import Box1 from "./Box1.vue";
    3. import Box2 from "./Box2.vue";
    4. import Box3 from "./Box3.vue";
    5. export default {
    6. data() {
    7. return {
    8. mycomponent:""
    9. };
    10. },
    11. methods: {
    12. fn(component) {
    13. this.mycomponent=component
    14. console.log("点击了"+component)
    15. }
    16. },
    17. components: {
    18. Box1,
    19. Box2,
    20. Box3
    21. }
    22. };
    23. script>

      子组件 Box1.vue   Box2.veu  Box3.vue文件 类似:

    1. <script>
    2. export default {}
    3. script>

      结果显示: 

     三、缓存组件keep-alive

    • 动态组件切换时,会把切换前的组件销毁了 只留下当前组件,每次切换新组件的时候,Vue 都创建了一个新的组件对象。
    • 有时候我们希望在A组件时用户做了一些操作,切换B组件时做了一些操作,当切回A组件时希望记住A的操作,不要重新创建A组件就引入缓存组件 。
    • keep-alive可以缓存动态切换的组件

       keep-alive提供的属性

    • include 设置需要缓存的组件 (组件名/正则)
    • exinclude 设置不需要缓存的组件 (组件名/正则)
    • :max 缓存最近切换的几个组件

       keep-alive提供的钩子函数

          必须在keep-alive里使用:activated  deactivated

    • activated:页面第一次进入的时候,钩子触发的顺序是 created->mounted->activated
    • deactivated: 页面退出的时候会触发 deactivated,当再次前进或者后退的时候只触发 activated

       父组件App.vue:

    1. <script>
    2. import Box1 from "./Box1.vue";
    3. import Box2 from "./Box2.vue";
    4. import Box3 from "./Box3.vue";
    5. export default {
    6. data() {
    7. return {
    8. mytemp: ""
    9. };
    10. },
    11. methods: {
    12. fn(component) {
    13. this.mytemp = component;
    14. console.log("点击了" + component);
    15. }
    16. },
    17. components: {
    18. Box1,
    19. Box2,
    20. Box3
    21. }
    22. };
    23. script>

       子组件 Box1.vue :