То, что там происходит, это то, что вы уже звоните next
, и это , почему маршрут вводится немедленно.
Где вы Вы вызываете next?
beforeRouteEnter (to, from, next) {
next(vm => { // <= HERE you execute next
vm.fetchPageData(next);
});
},
И приведенный выше код будет выполняться vm.fetchPageData
, когда компонент уже отрендерен.
Так что даже если вы не вызываете next
на fetchPageData
маршрут будет введен.
Предполагая, что вы хотите войти в представление после извлечения определенных данных BE, вы можете использовать beforeEnter
в конфигурации маршрутизатора:
const router = new VueRouter({
routes: [
{
path: '/foo',
component: Foo,
beforeEnter: (to, from, next) => {
axios.get('api/...')
.then(response => {
store.commit('mutation', response)
next()
})
.catch(e => {
alert('Something went wrong')
next(false)
})
}
}
]
})
Другим решением было бы разрешить вход на маршрут, но при загрузке данных показывать загрузчик: Получить этот ответ