Я понял это в более элегантном решении, чем реализация функции store.dispatch для каждой отдельной функции asyncData.
Итак, я использовал пользовательский компонент загрузки: https://nuxtjs.org/api/configuration-loading/#using-a-custom-loading-component
Однако вместо того, чтобы показывать индикатор выполнения или какую-либо анимацию загрузки, я просто использовал этот компонент, чтобы установить состояние загрузки в моем хранилище vuex. Обратите внимание - это заставляет вас иметь шаблон, но я просто навсегда отключил его.
<template>
<div v-if="false"></div>
</template>
<script>
export default {
methods: {
start() {
this.$store.dispatch('updateLoadingStatus', true);
},
finish() {
this.$store.dispatch('updateLoadingStatus', false);
}
}
};
</script>
Затем в своем промежуточном программном обеспечении я настроил средство отслеживания интервалов, чтобы проверять, остановилась ли загрузка. Когда он остановлен, я останавливаю интервал и закрываю мобильное меню.
export default function({ store }) {
if (store.state.page.mobileNav) {
if (store.state.page.loading) {
var watcher = setInterval(() => {
if (!store.state.page.loading) {
store.dispatch('updateMobileNav', false);
clearInterval(watcher);
}
}, 100);
} else {
store.dispatch('updateMobileNav', false);
}
}
}
Это не обязательно должно быть для открытия / закрытия мобильного меню. Он может использоваться для всего в промежуточном программном обеспечении, которому нужно дождаться разрешения asyncData. Надеюсь, что это может помочь любому в будущем!