首頁 >web前端 >js教程 >淺析Vue的非同步組件函數

淺析Vue的非同步組件函數

不言
不言原創
2018-07-19 17:17:151573瀏覽

這篇文章帶給大家的內容是關於淺析Vue的非同步元件函數,有著對應的程式碼實例,有需要的朋友可以參考一下。

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異步函數就完成了

相關推薦:

VSCode如何引入Vue元件和Js模組

以上是淺析Vue的非同步組件函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn