动态组件/异步组件

36 篇文章 0 订阅
3 篇文章 0 订阅

动态组件(component)

官网链接

Vue 本身提供了一个内置的 <component> 组件,该组件专门就是用来实现动态组件的渲染。
有些场景会需要在两个组件间来回切换,比如 Tab 界面:
对应内容比较多使用

组件1/2

在这里插入图片描述

主页面

<template>
  <div>
    <li v-for="(item, index) in tabList" :key="index" @click="change(index)">{{ item.name }}</li>
    <component :is="currentComponent.com"></component>
  </div>
</template>

<script lang='ts'>
import { reactive, toRefs, onBeforeMount, onMounted } from 'vue'
import { useRouter, useRoute } from 'vue-router'//引入路由
import abount from '../components/about/index.vue'
import bcase from '../components/case/index.vue'
export default {
  name: '',
  setup() {
    let router = useRouter(), route = useRoute();
    const data = reactive({
      tabList: [
        { name: '显示组件A', com: abount },
        { name: '显示组件B', com: bcase },
      ],
      currentComponent: { com: abount },
      change(index) {
        data.currentComponent.com = data.tabList[index].com
      }
    })
    onBeforeMount(() => {
    })
    onMounted(() => {
    })
    const refData = toRefs(data);
    return {
      ...refData,
    }

  }
};
</script>
<style scoped></style>

在这里插入图片描述

异步组件(suspense)

方法实例

分别创建3个组件A B C
<template>
  <div class="A">
    <A></A>
  </div>
  <div class="B">
    <B></B>
  </div>
  <div ref="target">
    <C v-if="targetIsVisible"></C>
  </div>
</template>
<script setup>
import A from '../components/about/index.vue'
import B from '../components/case/index.vue'
import { defineAsyncComponent, ref } from 'vue';
import { useIntersectionObserver } from '@vueuse/core'
const C = defineAsyncComponent(() =>
  //异步引入组件
  import('../components/house/index.vue'))
const target = ref(null)
// 获取需要操作的dom元素
const targetIsVisible = ref(false)
//定义一个dom元素显示与隐藏开关
const { stop } = useIntersectionObserver(
  //定义一个函数用于控制
  target,
  ([{ isIntersecting }]) => {
    //这里的isIntersecting表示的是dom元素是
    console.log(isIntersecting);
    if (isIntersecting) {
      targetIsVisible.value = isIntersecting
    }
  })
</script>

在这里插入图片描述

这样就实现了异步加载C组件,在页面视窗滚动到C组件时才会加载C组件。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值