export default new Router({
routes: [
{
path: '/live',
name: 'live',
component: () => import('@/view/live/live.vue')
}
]
})
上面的代码是很常见的router代码分割,只在代码路由为live才会去加载live.vue
但这样在live.vue获取的过程将是一片空白,什么也没有,体验不好, 利用vue提供的异步组建可以解决
新建一个 loadable.vue
<template>
<index></index>
</template>
<script>
import LoadingComponent from './load.vue' // LoadingComponents是 live.vue为获取前展示的内容
export default {
components: {
index: () => ({
component: import('@/view/live/live.vue'),
// 异步组件加载时使用的组件
loading: LoadingComponent,
// 展示加载时组件的延时时间。默认值是 200 (毫秒)
delay: 200,
// 如果提供了超时时间且组件加载也超时了,
// 则使用加载失败时使用的组件。默认值是:`Infinity`
timeout: 3000
})
}
}
</script>
然后修改router.js
export default new Router({
routes: [
{
path: '/live',
name: 'live',
component: import('loadable.vue')
}
]
})
这样在获取到live.vue之前就会有自定义的loading展示了
但是路由很多, 我们不可能每个路由都写一个 loadable.vue, 所以编写一个函数来解决
新建一个 loadable.js
import LoadingComponent from './load.vue'
export default (asyncComponent) => {
const Com= () => ({
// 这里vue官网可以知道具体有哪些参数可以设置
// https://cn.vuejs.org/v2/guide/components-dynamic-async.html#%E5%A4%84%E7%90%86%E5%8A%A0%E8%BD%BD%E7%8A%B6%E6%80%81
component: asyncComponent(),
loading: LoadingComponent
})
return {
render (h) {
return h(Com, {})
}
}
}
然后修改一下router.js
import loadable from 'loadable.js'
export default new Router({
routes: [
{
path: '/live',
name: 'live',
component: loadable (() => import('@/view/live/live.vue'))
}
]
})
这样一个极简的vue异步函数就完成了