近期,在
对于这个问题,一些人都提出了自己的解决方案,如:使用Vuex进行状态托管;加一个全局的守卫;在根节点加一个导航守卫;使用sessionStorange等等,结果都被否定了,这些都根本不可取,原因是:使用守卫时,需要触发点击操作进行监听,而这里并不需要点击监听,刷新也要实现该功能;sessionStorange用于本地存储一个会话(session)中的数据,当浏览器关闭后才会消失。
经过对Vue的工作原理进行分析后,小编给出了一个完美的解决方案,这里分享给大家!
对于这个问题,vue-resource的interceptors拦截器的作用正是解决此需求的妙方。要是有人使用axios中的interceptors的话,方法都是一样。
在每次http的请求响应之后,如果设置了拦截器,会优先执行拦截器函数,获取响应体,然后才会决定是否把response返回给
then进行接收。那么我们可以在这个拦截器里边添加对响应状态码的判断,来决定是跳转到登录页面还是留在当前页面继续获取数据。
Vue.http.interceptors.push((request, next) => { //在请求前可以做一些预处理
function getCookie(c_Name){
if(document.cookie.length >0) {
let c_start= document.cookie.indexOf(c_Name+"=");
if(c_start!=-1){