Вы можете сделать это на уровне маршрута.
const router = new VueRouter({
routes: [
{
path: '/foo',
component: Foo,
beforeEnter: (to, from, next) => {
doSomeRequests()
.then(() => (next()))
}
}
]
})
doSomeRequests
- это функция, выполняющая некоторый асинхронный код. Когда этот асинхронный код завершится, вы вызываете next()
, чтобы позволить маршрутизатору vue войти в компонент, соответствующий URL-адресу. В примере компонент Foo
Я бы предложил показать загрузчик в компоненте.
<template>
<!-- code -->
<LoaderComponent :loading="loading" />
<!-- code -->
</template>
И часть скрипта:
<script>
export default {
// code
data: () => ({
loading: false
}),
created () {
this.loading = true
doSomeRequests()
.then(<!-- code -->)
.finally(() => (this.loading = false))
}
}
</script>