请问如何优雅地在axios中访问vue的实例?

发布于 2022-09-05 03:42:08 字数 803 浏览 13 评论 0

项目用的vue-cli,现在我想在axios的拦截器中处理请求中的错误,同时用vue的组件显示出错误。我现在的做法是在index.html中定义了一个全局变量vm,在main.js中初始化Vue实例时,把返回的值赋给window.vm,再在axios的拦截器中用window.vm调用通知组件展示错误信息。但是我觉得这样的方法有点挫,而且不优雅,想请问下各位大神有什么更优雅的方式么?Thx!

示例:

index.html

    <html>
        <body></body>
        <script>
            var vm
        </script>
    </html>

main.js

    // 拦截器
    axios.intercepters.response.use(response => {
        if (!response.result) {
            window.vm.$info(response.message)
        }
    })
   
    // 初始化Vue实例
    window.vm = new Vue(...) 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

策马西风 2022-09-12 03:42:09

我觉得这样就挺好,如果你不想使用这个new出来的vm的话,也可以如此:

Vue.prototype.$info(response.message);

因为这个 $info, 也就是扩展到Vue对向上方便你在Vue对象里使用的。

維他命╮ 2022-09-12 03:42:09
const getAjax = (params,url,vue)=>{

let userId = vue.$store.state.user.info.user_id

  return service.get(HOST + url, {params: param})
    .then(res => {
      if(res.data.code === 200){
        return res.data.value
      }else {
        console.warn(res)
      }
    })
    .catch(res=>console.warn(res))
}

let userId = vue.$store.state.user.info.user_id就是使用vue访问,将vue通过调用的时候传参过来,
在 vue 组件里面:
getAjax (params,"/api/user",this)

冰雪梦之恋 2022-09-12 03:42:09

还可以考虑把 axios 拦截器放到 vuex 里,对 vuex 的 axiosMessage state 进行访问

同时在某个特定组件中绑定 axiosMessage 的 getter

还如梦归 2022-09-12 03:42:09

可以使用vuex或者是event bus,在拦截器中触发action或者事件来通知vue显示出错误信息

丿*梦醉红颜 2022-09-12 03:42:09

像这种全局功能的话可以考虑做成插件形式,例如做一个alert插件

可以参考vux的实现

https://github.com/airyland/v...

北方的韩爷 2022-09-12 03:42:09

我的方法是在main.js里export出创建的Vue实例,然后在axios里import,就可以访问Vue的实例了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文