vue 异步加载组件

先说一般的组件方式嘛

<template>
  <div>
    <button @click="show">点我</button>
    <div v-if="isShow">
      <Good></Good>
    </div>
  </div>
</template>

<script>
import Good from "./good"
export default {
  data() {
    return {
      isShow: false
    };
  },
  components: {
    Good
  },
  methods: {
    show() {
      this.isShow = !this.isShow;
    }
  }
};
</script>

然后你在网页打开控制台,这个0.js就是我要引入的Good组件,下面说到怎么改这个文件名
在这里插入图片描述
无论你怎么点击这个按钮,js都没变化,也就是说第一次进入这个页面js就加载好了,如果项目大,加载多就影响使用了

改善:

  1. 去掉上面代码的 import Good from “./good”
  2. 修改components
components: {
	//这里可以改变在控制台中的js文件名字,success就是引入的文件名,默认是0
    Good: () => import (/* webpackChunkName: 'success' */"./good")
  },

再次改善
这里我设置了组件加载失败,以及加载过程中的Loading显示,

  1. 点击按钮 会加载Load组件,等delay(延迟)1秒后加载出引入的good组件
  2. 若是3秒后没加载成功,就会显示引入的error组件
  3. 加载失败这个情况可以是timeout的时间大于delay的时间就好
<template>
  <div>
    <button @click="show">点我</button>
    <div v-if="isShow">
      <Good></Good>
    </div>
  </div>
</template>

<script>
import Load from "./loading "
import Error from "./error"
// 这里的Good就是组件名,发生更改组件名也要更改
const Good = () => ({
	component: import('./good'),
	loading:Load,
	error:Error,
	delay: 1000,
	timeout: 3000
})
export default {
  data() {
    return {
      isShow: false
    };
  },
  components: {
    Good
  },
  methods: {
    show() {
      this.isShow = !this.isShow;
    }
  }
};
</script>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当在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 }); ``` 通过以上方法,可以解决异步加载组件导致的白屏问题。希望对您有所帮助!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值