【vue 之后台返回动态路由】

vu中的路由很简单,官网上也没太多介绍,草草带过,这里介绍后台返回的动态路由。

  1. 定义router.js
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)

import Layout from './views/admin/index.vue'
// 静态路由,这里写好一些不需要从后台获取的路由,如首页,404页面
const constantRouterMap = [
	{
		path: "*",
		redirect: "/Login"
	},
	{
		path: "/Login",
		name:'login',
		component: () =>import("./views/Login.vue")
	}
]
export const navRoutes = []
export default new Router({
routes: constantRouterMap.concat(navRoutes)
})
  1. 路由守卫里获取动态路由,并追加
import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import store from "@/store/index.js";
import NProgress from "nprogress";
import { Message } from "common/utils";

if(window.__config.token && window.__config.userId){
	sessionStorage.setItem("token", window.__config.token);
	sessionStorage.setItem("userId", window.__config.userId);
	store.state.RoleId=1
	store.state.admin.userName = 'admin'
	sessionStorage.userName = 'admin'
}
NProgress.configure({ showSpinner: false }) // NProgress Configuration

let getRouter = null
router.beforeEach((to, from, next) => {
  let token = sessionStorage.getItem("token")
  if(!token && to.path != '/Login'){ 
    next({path: '/Login'})
  }else{
    if (!!token) {//有token
      if(!getRouter){
        //拿到路由,假装getRouter是从后台拿回来的
        getRouter = [{
          path: "/admin",
          component: () => import(/* webpackChunkName: "admin" */ "./views/admin/index.vue"),
          meta: {
            keepAlive:false
          },
          children: [
            {
              path: "/admin/main2",
              name:'主页-新',
              component: () =>import(/* webpackChunkName: "admin" */ "./views/admin/main3.vue"),
              meta: {
                keepAlive:false
              }
            },
          ]
        }] 
        router.addRoutes(getRouter) //动态添加路由
        // router.navRoutes = getRouter
        console.log(router)
        // global.antRouter = getRouter //将路由数据传递给全局变量,做侧边栏菜单渲染工作
        next({ ...to, replace: true })
      }else{
        next()
      }
    } else {
      //没有token
      if(to.path == '/Login'){
        next()
      }else{
        next({path:'/Login'})
      }
    }
  }
})

router.afterEach(() => {
	NProgress.done();
});

new Vue({
	router,
	store,
	i18n,
	render: h => h(App)
}).$mount("#app");
  1. 用户登录成功后直接跳
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值