極簡Vue的異步組件函數

export default new Router({
  routes: [
    {
      path: '/live',
      name: 'live',
      component: () => import('@/view/live/live.vue')
    }
  ]
})

上面的代碼是很常見的router代碼分割,只在代碼路由爲live纔會去加載live.vue
但這樣在live.vue獲取的過程將是一片空白,什麼也沒有,體驗很差, 利用vue提供的異步組建能夠解決html

新建一個 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, 因此編寫一個函數來解決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異步函數就完成了異步

相關文章
相關標籤/搜索