Vue3中使用component :is 加载组件

Vue3中使用component :is 加载组件

1.不使用setup语法糖,这种方式和vue2差不多,is可以是个字符串

javascript"><template>
 
  <Child1 />
  <Child2 />
  <***ponent :is="current***p"></***ponent>
 
  <el-button @click="***pChange">切换组件</el-button>
 
</template>
<script>
  import { ref } from 'vue'
  import Child1 from './Child1.vue'
  import Child2 from './Child2.vue'
  export default {
    ***ponents: {
      Child1,
      Child2
    },
    setup() {
      let current***p = ref('Child1')
 
      // 切换组件
      const ***pChange = () => {
        if(current***p.value == 'Child1') {
          current***p.value = 'Child2'
        }else {
          current***p.value = 'Child1'
        }
      }
      return {
        current***p,
        ***pChange
      }
    }
  }
 
 
</script>

2. 使用setup语法糖,这时候的is如果使用字符串会加载不出来,得使用组件实例

第一种方式

<template>
 
  <Child1 />
  <Child2 />
  <***ponent :is="flag ? Child1 : Child2"></***ponent>
 
  <el-button @click="flag = !flag">切换组件</el-button>
 
</template>
<script setup>
  import { ref } from 'vue'
  import Child1 from './Child1.vue'
  import Child2 from './Child2.vue'
 
  const flag = ref(true)
 
</script>

第二种方式

<template>
 
  <Child1 />
  <Child2 />
  <***ponent :is="current***p"></***ponent>
 
  <el-button @click="***pChange">切换组件</el-button>
 
</template>
<script setup>
  import { shallowRef, ref } from 'vue'
  import Child1 from './Child1.vue'
  import Child2 from './Child2.vue'
 
  //这里用ref的话,vue给出警告Vue接收到一个组件,该组件被制成反应对象。这可能会导致不必要的性能开销,应该通过将组件标记为“markRaw”或使用“shallowRef”而不是“ref”来避免。
  // 如果使用 markRaw 那么current***p将不永远不会再成为响应式对象。 所以得使用 shallowRef
  let current***p = shallowRef(Child1)  
 
  // 切换组件
  const ***pChange = () => {
    if(current***p.value == Child1) {
      current***p.value = Child2
    }else {
      current***p.value = Child1
    }
  }
 
</script>

转载请说明出处内容投诉
CSS教程_站长资源网 » Vue3中使用component :is 加载组件

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买