请问如何优雅地在axios中访问vue的实例?
项目用的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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
我觉得这样就挺好,如果你不想使用这个
new
出来的vm
的话,也可以如此:因为这个
$info
, 也就是扩展到Vue
对向上方便你在Vue
对象里使用的。let userId = vue.$store.state.user.info.user_id就是使用vue访问,将vue通过调用的时候传参过来,
在 vue 组件里面:
getAjax (params,"/api/user",this)
还可以考虑把 axios 拦截器放到 vuex 里,对 vuex 的 axiosMessage state 进行访问
同时在某个特定组件中绑定 axiosMessage 的 getter
可以使用vuex或者是event bus,在拦截器中触发action或者事件来通知vue显示出错误信息
像这种全局功能的话可以考虑做成插件形式,例如做一个alert插件
可以参考vux的实现
https://github.com/airyland/v...
我的方法是在main.js里export出创建的Vue实例,然后在axios里import,就可以访问Vue的实例了。