VueRouter的全局守卫,如何获取到Vue实例

其实我想在beforeEach这个钩子函数里面做登录验证,而这个登录验证会调后台接口,但是这个钩子函数里面获取不到vm的实例,这样我就无法取得store里的token,也无法请求后台,折腾了一早上,实在没找到解决方法,只能请求大家指点一二

相关代码

Router.vue
<script>
    import Vue from 'vue'
    import VueRouter from 'vue-router'
    Vue.use(VueRouter)
    import Api from '@/components/config/Api'
    import home from '@/pages/index'
    import login from '@/pages/login'
    import info from '@/pages/info'

    const router = new VueRouter({
        routes: [{
            path: '/',
            name: 'index',
            component: home
        },{
            path: '/login',
            name: 'login',
            component: login
        },{
            path: '/info',
            name: 'info',
            component: info
        }],  
    });
    
    router.beforeEach((from, to, next) => {
        this.$http.get(Api.is_login_uri,{params: {"1":this.$store.state.token}}).then(function(res){
            let code = res.data.code;
            if(code != "0"){
                next({path:'/info',params:{"msg":res.data.data}});
            }
        },function(error){
            next({path:'/info',params:{"msg":"请求验证登录出了问题"}});
        });
    })

    export default router;
</script>
main.js的代码
import router from './components/config/Router'
import store from './components/config/Store'

// 导入 pages 下的 Home.vue 
//import index from './pages/index'

// 创建 Vue 实例*
var vm = new Vue({
  el: '#app',
  router,
  store,
  data(){
    return {
    }
  },
  created(){
    document.title=this.Global.appName;
  }
})
阅读 9.8k
3 个回答

你在路由router.js里引入你的store.js试试哦

const vm = Vue.prototype;
打印下vm就知道能不能拿到vue那些信息了

换个思路,在 router.js 里面把 store 引进去,不就行了?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题