当前位置: 首页 > news >正文

如果vue加载页面的时候,需要加载很多子vue ,能不能先加载一个,让页面处于能用的状态,多余的在后台加载。


1. 使用 v-if 条件渲染

v-if 指令可以根据条件来决定是否渲染组件,利用这个特性可以先渲染一个必要的子组件,其余组件在合适的时机再渲染。

示例代码

<template>
  <div>
    <!-- 先加载的子组件 -->
    <FirstComponent />
    <!-- 其余子组件根据条件渲染 -->
    <SecondComponent v-if="isSecondLoaded" />
    <ThirdComponent v-if="isThirdLoaded" />
    <button @click="loadMoreComponents">加载更多组件</button>
  </div>
</template>

<script>
import FirstComponent from './FirstComponent.vue';
import SecondComponent from './SecondComponent.vue';
import ThirdComponent from './ThirdComponent.vue';

export default {
  components: {
    FirstComponent,
    SecondComponent,
    ThirdComponent
  },
  data() {
    return {
      isSecondLoaded: false,
      isThirdLoaded: false
    };
  },
  methods: {
    loadMoreComponents() {
      this.isSecondLoaded = true;
      this.isThirdLoaded = true;
    }
  }
};
</script>

代码解释

  • 页面加载时,FirstComponent 会被直接渲染,用户可以与该组件进行交互,让页面处于可用状态。
  • SecondComponent 和 ThirdComponent 初始时 v-if 条件为 false,不会被渲染。
  • 当用户点击 加载更多组件 按钮时,loadMoreComponents 方法会将 isSecondLoaded 和 isThirdLoaded 设置为 true,从而渲染这两个组件。


2. 使用动态组件和异步组件

Vue 支持动态组件和异步组件,结合这两个特性可以实现子组件的按需加载。
示例代码
 

<template>
  <div>
    <!-- 先加载的子组件 -->
    <component :is="currentComponent" />
    <button @click="loadMoreComponents">加载更多组件</button>
  </div>
</template>

<script>
import FirstComponent from './FirstComponent.vue';

// 异步组件
const SecondComponent = () => import('./SecondComponent.vue');
const ThirdComponent = () => import('./ThirdComponent.vue');

export default {
  data() {
    return {
      currentComponent: FirstComponent,
      componentsToLoad: [SecondComponent, ThirdComponent]
    };
  },
  methods: {
    loadMoreComponents() {
      if (this.componentsToLoad.length > 0) {
        this.currentComponent = this.componentsToLoad.shift();
      }
    }
  }
};
</script>

代码解释

  • 页面加载时,currentComponent 初始值为 FirstComponent,所以先渲染该组件。
  • SecondComponent 和 ThirdComponent 是异步组件,使用 import() 语法实现懒加载。
  • 当用户点击 加载更多组件 按钮时,loadMoreComponents 方法会从 componentsToLoad 数组中取出一个组件并赋值给 currentComponent,从而渲染该组件。

3.使用 Vue.lazy(Vue 3 组合式 API)

在 Vue 3 中,可以使用 Vue.lazy 函数来创建异步组件,实现更简洁的按需加载。

示例代码

<template>
  <div>
    <!-- 先加载的子组件 -->
    <FirstComponent />
    <!-- 其余子组件按需加载 -->
    <component :is="secondComponent" v-if="isSecondLoaded" />
    <component :is="thirdComponent" v-if="isThirdLoaded" />
    <button @click="loadMoreComponents">加载更多组件</button>
  </div>
</template>

<script setup>
import { ref } from 'vue';
import FirstComponent from './FirstComponent.vue';

// 异步组件
const secondComponent = () => import('./SecondComponent.vue');
const thirdComponent = () => import('./ThirdComponent.vue');

const isSecondLoaded = ref(false);
const isThirdLoaded = ref(false);

const loadMoreComponents = () => {
  isSecondLoaded.value = true;
  isThirdLoaded.value = true;
};
</script>

代码解释

  • 与前面的示例类似,页面先渲染 FirstComponent。
  • secondComponent 和 thirdComponent 是异步组件,通过 import() 实现懒加载。
  • 当用户点击按钮时,loadMoreComponents 方法会将 isSecondLoaded 和 isThirdLoaded 设置为 true,从而渲染这两个组件。

通过以上方法,可以在 Vue 中实现先加载一个子组件让页面可用,其余子组件在后台或按需加载的效果。

相关文章:

  • Java 基础入门代码示例解析
  • 使用Python调用Jenkins Api之获取构建日志使用说明文档
  • SpringBoot 3.0之后为什么移除了spring.factories
  • 好好学Docker:基于Docker buildx构建多平台镜像【转载】
  • Python爬取微博签到数据(2025年3月更)
  • python的文件上传
  • 单片机 - RAM 与内存、ROM 与硬盘 之间的详细对比总结
  • 【MySQL】JDBC —— Java 连接 MySQL
  • Qt 隐式共享
  • Java「Deque」 方法详解:从入门到实战
  • 信息安全和病毒防护——入侵检测技术
  • selenium基本使用(二)九种定位方法
  • 深度优先搜索(DFS)在排列组合问题中的应用详解:C++实现与优化
  • 第一章,网络发展史///OSI七层模型
  • 【开题报告+论文+源码】基于SpringBoot+Vue的酒店餐饮管理系统设计与实现
  • CTF类题目复现总结-[羊城杯 2020]TCP_IP 1
  • 25. 策略模式
  • Java 编译 API(javax.tools 包)的使用方法及关键点总结,适用于在运行时动态编译 Java 代码
  • 【MySQL篇】DEPENDENT SUBQUERY(依赖性子查询)优化:从百秒到秒级响应的四种优化办法
  • 芋道 Spring Cloud Alibaba 消息队列 RocketMQ 入门
  • 莱布雷希特专栏:古典乐坛边缘人
  • 广东茂名高州市山体滑坡已致3死1失联,搜救仍在继续
  • 梅花奖在上海|秦海璐:演了15年《四世同堂》,想演一辈子
  • 看展 | 黄永玉新作展,感受赤子般的生命力
  • 通往国际舞台之路:清政府与万国公会的交往
  • 王伟妻子人民日报撰文:81192,一架永不停航的战机