美文网首页
Vue动态添加路由

Vue动态添加路由

作者: Enginner_XZ | 来源:发表于2020-10-20 16:11 被阅读0次
  • 开发一个不同用户不同权限显示不同菜单项目 , 需要实现不同权限添加不同路由
  • 通过前置路由守卫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();
  }
});

相关文章

  • [vue-router] Duplicate named rou

    翻译:vue-router 重复的命名路由定义静态路由:只需要修改重复 name动态路由:没有添加过才添加

  • vue动态添加路由

  • Vue添加动态路由

    需求 后台管理需要根据登陆的用户权限做菜单控制 思路 后台返回用户权限,保存到vuex中,判断权限是否有惨淡导航,...

  • Vue动态添加路由

    开发一个不同用户不同权限显示不同菜单项目 , 需要实现不同权限添加不同路由 通过前置路由守卫router.befo...

  • vue路由的介绍(二)--vue动态路由和get的传值

    vue动态路由和get的传值---->同属于路由的传参 1,vue动态路由: 动态路由的配置: ①,在配置路由时加...

  • vue 使用addRoutes动态添加路由 刷新页面跳转404路

    在做vue项目时需要使用后端给的路由权限,处理路由动态添加到路由上,几经查找在 vue-Router中有个rou...

  • vue 动态理由

    1、概念 动态添加 vue-router 路由规则。经典使用场景:根据当前登录用户权限进行路由规则的添加。详见 v...

  • Vue应用

    Vue项目 Vue结构 Vue项目打包与发布 Vue语法二 Vue网络请求 Vue路由 动态路由 编程式路由导航

  • router4 ts动态添加路由

    今天研究route4.0 在vue3里面,使用ts的方式定义路由并且进行动态添加。route4.0在添加路由的方式...

  • Vue动态添加router路由

    this.$router.addRoutes(); 参数是一个数组,里面的对象就是添加上去的路由。 例子: thi...

网友评论

      本文标题:Vue动态添加路由

      本文链接:https://www.haomeiwen.com/subject/wnudmktx.html