vue异步组件按需加载

vue异步组件按需加载

一、注册组件时,使用()=>import(‘组件路径’)

<template>
  <div class="home">
    <button @click="change">加载Icon组件</button>
    <icon v-if="(isShow)" />
  </div>
</template>

<script>
// import Icon from ;
export default {
  name: "home-index",
  components: {
    Icon:()=>import("./icon")
  },
  data(){
    return {
      isShow:false
    }
  },
  methods: {
    change(){
      this.isShow = !this.isShow
    }
  },
};
</script>

效果:

点击“加载Icon组件”按钮前,页面并没有加载Icon组件的js:
在这里插入图片描述
点击“加载Icon组件”按钮后,页面加载了Icon组件的js:
在这里插入图片描述

二、使用异步组件工厂函数实现懒加载

<template>
  <div class="home">
    <button @click="change">加载Icon组件</button>
    <async_icon v-if="isShow"/>
  </div>
</template>

<script>
import loading from "./loading";
import page404 from "./page404";
const async_icon = ()=>({
  // 要加载的组件
  component:import("./icon"),
  // 加载过程中展示的组件
  loading:loading,
  // 加载失败时展示的组件
  error:page404,
  // 延时加载时间
  delay:500,
  // 超时时间
  timeout:2000,
})
export default {
  name: "home-index",
  components: {
    async_icon
  },
  data(){
    return {
      isShow:false
    }
  },
  methods: {
    change(){
      this.isShow = !this.isShow
    }
  },
};
</script>

效果:

在慢3G的情况下,点击“加载Icon组件”按钮后,页面加载优先加载loading组件:
在这里插入图片描述
再加载Icon组件:
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当在Vue中使用异步加载组件时,有时候可能会遇到白屏的问题。这通常是由于异步加载组件的过程中,加载时间过长导致的。以下是一些常见的解决方法: 1. 添加加载状态:在异步加载组件的过程中,可以添加一个加载状态,显示一个loading界面或者加载动画,以提供用户反馈。这可以通过在组件的data中添加一个isLoading的状态来实现,并在加载完成后将其设置为false。 ```javascript data() { return { isLoading: true, // 初始加载状态为true component: null, // 初始化组件为null }; }, mounted() { import('./AsyncComponent.vue') .then((component) => { this.component = component.default; // 导入组件 }) .catch((error) => { console.error('Failed to load component:', error); }) .finally(() => { this.isLoading = false; // 加载完成,loading状态为false }); }, ``` 然后,在模板中根据isLoading状态来显示不同的内容: ```vue <template> <div> <!-- 根据isLoading状态显示不同内容 --> <div v-if="isLoading"> <!-- 显示loading界面或加载动画 --> <Loading /> </div> <div v-else> <!-- 异步加载组件 --> <component :is="component" /> </div> </div> </template> ``` 2. 代码拆分与懒加载Vue支持代码拆分和懒加载,可以将组件加载,避免在初始加载时就加载所有组件。可以使用`import()`函数进行动态导入组件。 ```javascript Vue.component('AsyncComponent', () => import('./AsyncComponent.vue')); ``` 这样,组件将会在要使用时才进行加载,减少了初始加载的资源量。 3. 预加载组件:如果某个组件在初始加载时不会被立即使用,但是会在后续被频繁使用,可以考虑使用Vue提供的`Vue.component`的`preload`函数来预加载组件。这样可以在初始加载时就预先加载组件,避免后续使用时的延迟。 ```javascript Vue.component('AsyncComponent', () => import('./AsyncComponent.vue').then(m => m.default), { preload: true }); ``` 通过以上方法,可以解决异步加载组件导致的白屏问题。希望对您有所帮助!如果还有其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值