Sho*_*uri 0 vue.js vuex nuxt.js
我正在使用默认的 nuxt 加载栏,它在简单的页面上运行良好。但是当我使用多个 axios 请求时,每次发送请求时都会加载进度条。我希望进度条将所有这些请求理解为单个页面加载。我使用了 Promise.all 并且它有点工作。但我的问题是我使用的是异步 vuex 调度方法。
所以我的代码是这样的,三个不同的异步调度和进度条加载了 3 次。我怎样才能让它只加载一次。谢谢
async fetch({ store }) {
await store.dispatch('LOAD_DATA_1')
await store.dispatch('LOAD_DATA_2')
await store.dispatch('LOAD_DATA_3')
}
Run Code Online (Sandbox Code Playgroud)
它加载了三个不同的时间,因为您的请求是按顺序发生的,一个接一个,而不是一次。为了解决这个问题,您可以手动启动/停止加载程序。
首先,您需要防止 nuxt axios 插件触发加载栏。见这里。
this.$axios.$get('URL', { progress: false })
Run Code Online (Sandbox Code Playgroud)
然后,您可以在请求完成之前/之后以编程方式手动启动和停止加载栏。
this.$nuxt.$loading.start()
this.$nuxt.$loading.stop()
Run Code Online (Sandbox Code Playgroud)
完整示例:
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()
}
Run Code Online (Sandbox Code Playgroud)
编辑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()
},
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1366 次 |
| 最近记录: |