Он загружается три раза, потому что ваши запросы выполняются последовательно, один за другим, а не все сразу. Чтобы обойти это, вы можете вручную запустить / остановить загрузчик.
Во-первых, вы захотите запретить плагину nuxt ax ios запускать полосу загрузки. Смотрите здесь .
this.$axios.$get('URL', { progress: false })
Затем вы можете вручную запускать и останавливать панель загрузки программно до / после завершения запросов.
this.$nuxt.$loading.start()
this.$nuxt.$loading.stop()
Полный пример:
async fetch({ store }) {
this.$nuxt.$loading.start()
await store.dispatch('LOAD_DATA_1')
await store.dispatch('LOAD_DATA_2')
await store.dispatch('LOAD_DATA_3')
this.$nuxt.$loading.stop()
}
edit 1 (см. комментарий):
Для использования в asyncData / fetch вы можете использовать следующее. Я не уверен, что вы должны обращаться к таким компонентам, как этот, но я не вижу другого способа доступа к модулю $ loading в контексте ...
async fetch(ctx) {
// access the loading component via the access context
ctx.app.components.NuxtLoading.methods.start()
// example, wait 3 seconds before disabling loader
await new Promise(resolve => setTimeout(resolve, 3000))
ctx.app.components.NuxtLoading.methods.finish()
},