Мы создаем огромный веб-сайт на основе Vue и Nuxt с более чем 25 различными типами страниц, которые не могут быть сопоставлены со стандартной логикой /: id или / Overview /: slug, которая поставляется из коробки с Vue Router.
Поскольку слизняк не подходит, мы думаем о следующем решении:
- Страница посещений пользователя "/ this-is-a-theme-page"
- Сервер вызывает API, который возвращает pageType
topicPage
topicPage
относится к пустой странице WpTopicPage
- Мы устанавливаем
WpTopicPage
в качестве нашего компонента в нашем экземпляре шаблона Vue Router
В коде это выглядит следующим образом:
export function createRouter() {
return new Router({
mode: 'history',
routes: [
// 1. User visits page "/this-is-a-topic-page"
{
name: 'wildcard',
path: '*',
component: *, // this should be dynamic
beforeEnter: (to, from, next) => {
// 2. Server calls API that returns the pageType `topicPage`
this.$axios.get(`/call-to-the-api?slug=${to.params.slug}`)
.then((res) => {
// 3. `topicPage` relates to the nuxt page `WpTopicPage`
if(res.data.pageType === 'topicPage') {
// 4. Set `WpTopicPage` as our Page component
return WpTopicPage;
}
})
},
},
],
});
}
Выше явно не работает. Есть ли способ динамически установить component
в пределах маршрута в функции beforeEnter?