You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nuxt插件配置axios全请求全局加载时this报错如何解决

问题原因

Nuxt 执行插件函数时不会绑定this上下文,同时你写的请求/错误回调是箭头函数,本身也不持有this对象,因此直接访问this会抛出未定义错误。
插件函数的第一个解构参数已经包含了你需要的所有上下文实例,不需要通过this.$nuxt逐层获取实例。
另外你原来的代码只在请求报错时关闭加载效果,缺少请求成功后的关闭逻辑,会导致请求正常返回后加载动画一直驻留。

修正代码

直接从上下文中解构出的app(根Vue实例)上调用$loading方法即可,补全响应成功的回调逻辑:

// plugins/axios.js
export default function ({ app, $axios, redirect, store }, inject) {
  $axios.onRequest(config => {
    app.$loading.start()
    // 必须返回config,否则请求配置会丢失
    return config
  })

  // 新增:请求正常返回时关闭loading
  $axios.onResponse(response => {
    app.$loading.finish()
    return response
  })

  $axios.onError(error => {
    app.$loading.finish()
    // 必须抛出错误,否则业务层捕获不到请求异常
    return Promise.reject(error)
  })
}
并发场景优化

如果页面存在同时发起多个axios请求的场景,上面的写法会出现第一个请求返回就提前关闭loading的问题,可以通过请求计数器优化逻辑:

// plugins/axios.js
export default function ({ app, $axios, redirect, store }, inject) {
  let requestCount = 0

  const showLoading = () => {
    if (requestCount === 0) app.$loading.start()
    requestCount++
  }

  const hideLoading = () => {
    requestCount--
    if (requestCount <= 0) {
      requestCount = 0
      app.$loading.finish()
    }
  }

  $axios.onRequest(config => {
    showLoading()
    return config
  })

  $axios.onResponse(response => {
    hideLoading()
    return response
  })

  $axios.onError(error => {
    hideLoading()
    return Promise.reject(error)
  })
}
注意事项
  • 确认插件已经在nuxt.config.js的plugins数组中正确注册
  • 确认项目中没有手动关闭Nuxt内置loading功能,否则调用方法不会生效

内容的提问来源于stack exchange,提问作者morteza mortezaie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 05:27:47