Vue позволяет вам определить ваш компонент как фабричную функцию, которая асинхронно разрешает определение вашего компонента.
Поскольку import()
возвращает обещание, вы можете зарегистрировать свой асинхронный компонент, используя:
export default {
components: {
'Alfa': () => import('@/components/Alfa'),
'Bravo': () => import('@/components/Bravo'),
'Charlie': () => import('@/components/Charlie')
}
}
Vue активирует фабричную функцию только тогда, когда компонент должен быть визуализирован, и будет кэшировать результат для будущих повторных визуализаций.
Итак, ваш компонентбудет загружаться только тогда, когда это необходимо для рендеринга.
И вы можете использовать динамический компонент для его рендеринга, используя:
<component :is='page'/>
и
export default {
computed: {
page () {
return 'Alfa'
}
}
}
Если выуже используя vue-router
, вы можете напрямую использовать это в определении маршрутов.Подробнее см. В документе здесь .
const router = new VueRouter({
routes: [{
path: '/alfa',
component: () => import('@/components/Alfa')
}, {
path: '/bravo',
component: () => import('@/components/Bravo')
}, {
path: '/charlie',
component: () => import('@/components/Charlie')
}]
})
Как вы можете видеть, это динамический импорт, но статическая регистрация (необходимо указать путь к компоненту.), Которая подходит в большинстве случаев.Но если вы хотите использовать динамическую регистрацию, вы можете вернуть компонент напрямую вместо имени, см. Документ здесь .
export default {
computed: {
page () {
return () => import('@/components/Alfa')
}
}
}