微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Vue异步组件处理路由组件加载状态的解决方案

vue.js 组件

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

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

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

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

解决方

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

具体实现

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

({ // 需要加载的组件 (应该是一个 `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); } }); }

引入路由

lazyLoadView(import('@/components/helloWorld')) vue-router中使用 routes: [ { path: '/helloWorld',name: 'helloWorld',component: helloWorld } ]

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

总结

以上所述是小编给大家介绍的Vue异步组件处理路由组件加载状态的解决方案。编程之家 jb51.cc 收集整理的教程希望能对你有所帮助,如果觉得编程之家不错,可分享给好友!感谢支持

原文地址:https://www.jb51.cc/vue/30362.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐