位置:首页 > web前端 > vue

vue实现根据用户设置不同路由 路由的动态加载

dearweb 发布:2021-05-14 23:08:01阅读:

在开发一个后台管理项目时会根据用户的不同设置不同的权限,这个时候我们就需要用到动态添加路由的方式进行,并结合前置路由守卫router.beforeEach实现

二级菜单路由列表

const childRouters = {
  "/good": {
    path: "/good",
    name: "Good",
    component: () =>
      import(/* webpackChunkName: "good" */ "../views/Good/Good.vue"),
  },
  "/category": {
    path: "/category",
    name: "Category",
    component: () =>
      import(
        /* webpackChunkName: "category" */ "../views/Category/Category.vue"
      ),
  },
  "/brand": {
    path: "/brand",
    name: "Brand",
    component: () =>
      import(/* webpackChunkName: "brand" */ "../views/Brand/Brand.vue"),
  },
  "/attribute": {
    path: "/attribute",
    name: "Attribute",
    component: () =>
      import(
        /* webpackChunkName: "attribute" */ "../views/Attribute/Attribute.vue"
      ),
  },
  "/order": {
    path: "/order",
    name: "Order",
    component: () =>
      import(/* webpackChunkName: "order" */ "../views/Order/Order.vue"),
  },
  "/topic": {
    path: "/topic",
    name: "Topic",
    component: () =>
      import(/* webpackChunkName: "topic" */ "../views/Topic/Topic.vue"),
  },
  "/statdata": {
    path: "/statdata",
    name: "Statdata",
    component: () =>
      import(
        /* webpackChunkName: "statdata" */ "../views/Statdata/Statdata.vue"
      ),
  },};

封装重复代码

const genRoute = () => {
  let newRouters = [];
  for (let i = 0; i < store.state.powerList.length; i++) {
    var path = store.state.powerList[i].path;
    if (childRouters[path]) {
      newRouters.push(childRouters[path]);
    }
  }
  router.addRoutes([
    {
      path : '/home',
      component:() => import(/* webpackChunkName: "home" */ '../views/Home/Home.vue'),
      children : newRouters    }
  ])};

前置路由守卫

router.beforeEach((to, form, next) => {
  // 当没有本地token , 并且目标路由不是login时执行
  if (to.path !== "/login" && !localStorage.getItem("token")) {
    return next("/login");
    // 当有token 没有数据时执行
  } else if (store.state.powerList.length === 0 && localStorage.getItem("token")) {
    GetUserByToken().then((response) => {
      store.commit("savePowerList", response.data.menu );
      genRoute();
      return next( store.state.powerList[0].path );
    });
  } else {
    next();
  }});


24人点赞 返回栏目 提问 分享一波

小礼物走一波,支持作者

还没有人赞赏,支持一波吧

留言(问题紧急可添加微信 xxl18963067593) 评论仅代表网友个人 留言列表

暂无留言,快来抢沙发吧!

本刊热文
网友在读
手机扫码查看 手机扫码查看