解决Vue在封装了Axios后手动刷新页面拦截器无效的问题
程序员文章站
2022-07-22 08:34:17
项目类型:vue+vux+axios
刚开始,把axios封装在了http.js文件里面,然后为了使用vux的提示框消息,把拦截器直接写在了main.js里面。直接调用接...
项目类型:vue+vux+axios
刚开始,把axios封装在了http.js文件里面,然后为了使用vux的提示框消息,把拦截器直接写在了main.js里面。直接调用接口,一切正常。
然而因为返回值有统一的code错误代码提示,所以在拦截器里面加入了code的判断以便统一返回值。刚开始一切都是按照预期的结果来走的。就在一个夜黑风高的晚上,我头晕眼花的按f5手动刷新了一下页面,惊奇的发现拦截器失效了,并没有拦截外面的coode json代码层,而是直接把服务器的全部json数据劈头盖脸的砸在了我的脸上。一脸懵逼的我以为是接口的问题,可是在组件里面直接用console.log打印出来的数据又是对的。
然后我突然想到了一个问题,直接点击页面返回的话,确实是ok的,但是如果按f5手动刷新的话,axios并不会直接走main.js里面的拦截器代码。
后来我把拦截器放在了封装的http.js里面,结果就一切正常了,不过郁闷的是放在了外面以后,vux的提示插件没有办法用了。
打印了this指针,果不其然的undefind了,后来想到了一个比较变通的方法,我在index.html里面增加了一个var app用来存储main里面初始化的vue对象,并且在main.js里面把初始化的vue对象给赋值到windows.app上面,这样全局都可以使用了。
把vux的提示代码加上window.app.$vux.toast.show
完美解决问题!
总结
以上所述是小编给大家介绍的解决vue在封装了axios后手动刷新页面拦截器无效的问题,希望对大家有所帮助