vue路由切换组件没有加载_Vue异步组件处理路由组件加载状态的解决方案

本文介绍了在Vue.js应用中,使用webpack代码分割和Vue Router路由懒加载优化性能的同时,如何处理路由切换时组件加载状态。通过创建异步组件并结合loading和error组件,提供良好的用户体验。
摘要由CSDN通过智能技术生成

vue.js 组件

组件(Component)是 Vue.js 最强大的功能之一。

组件可以扩展 HTML 元素,封装可重用的代码。

在大型单页面应用中,处于对性能的考虑和首屏加载速度的要求,我们一般都会使用webpack的代码分割和vue-router的路由懒加载功能将我们的代码分成一个个模块,并且只在需要的时候才从服务器加载一个模块。

但是这种解决方案也有其问题,当网络环境较差时,我们去首次访问某个路由模块,由于加载该模块的资源需要一定的时间,那么该段时间内,我们的应用就会处于无响应的状态,用户体验极差。

解决方案

这种情况,我们一方面可以缩小路由模块代码的体积,静态资源使用cdn存储等方式缩短加载时间,另一方面则可以路由组件上使用异步组件,显示loading和error等状态,使用户能够得到清晰明了的操作反馈。

具体实现

声明方法,基于Vue动态组件工厂函数来返回一个Promise对象

/**

* 处理路由页面切换时,异步组件加载过渡的处理函数

* @param {Object} AsyncView 需要加载的组件,如 import('@/components/home/Home.vue')

* @return {Object} 返回一个promise对象

*/

function lazyLoadView (AsyncView) {

const AsyncHandler = () => ({

// 需要加载的组件 (应该是一个 `Promise` 对象)

component: AsyncView,

// 异步组件加载时使用的组件

loading: require('@/components/public/RouteLoading.vue').default,

// 加载失败时使用的组件

error: require('@/components/public/RouteError.vue').default,

// 展示加载时组件的延时时间。默认值是 200 (毫秒)

delay: 200,

// 如果提供了超时时间且组件加载也超时了,

// 则使用加载失败时使用的组件。默认值是:`Infinity`

timeout: 10000

});

return Promise.resolve({

functional: true,

render (h, { data, children }) {

return h(AsyncHandler, data, children);

}

});

}

引入路由

const helloWorld = () => lazyLoadView(import('@/components/helloWorld'))

vue-router中使用

routes: [

{

path: '/helloWorld',

name: 'helloWorld',

component: helloWorld

}

]

至此,改造已经完成,当你首次加载某一个组件的资源时(可以将网速调为 slow 3g,效果更明显),就会显示你在loading组件的内容,而当超出超时时间仍未加载完成该组件时,那么将显示error组件的内容(建议error组件尽量简单,因为当处于低速网络或者断网情况下时,error组件内的图片资源等有可能出现无法加载的问题)

总结

以上所述是小编给大家介绍的Vue异步组件处理路由组件加载状态的解决方案,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值