Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
430 views
in Technique[技术] by (71.8m points)

vue的路由router.addRoutes添加不上?

现在的业务逻辑是这样的:
权限给前端去处理,用户登录后根据用户的返回的key去匹配(就是一个数组,写死的)如果有的话说明没有权限,就是这个key找到了说明没有权限。然后处理时候生成一个新的数组,也就是路由的list。添加给router 然后。。。就进行跳转首页;
前端有2个路由的数组 一个就是动态的(需要经过权限处理的)另`一个就是基础路由 像登录、404之类的。
业务是这样的 给各位看下代码

router.beforeEach((to, from, next) => {
               /* 判断登陆状态 */
               let user = store.state.user;
               console.log(user.isLogin,'user.isLogin');
               console.log(router,'登陆之前的路由')
               if (user.isLogin) {
                   // if ((user && typeof user.userRole === 'string' )) {
                           let { userRole } =user
                           store.dispatch('GenerateRoutes', { userRole }).then( () => {
                           router.addRoutes(store.getters.addRouters)
                           console.log(router,'59')
                           const redirect = decodeURIComponent(from.query.redirect || to.path)
                           if (to.path === redirect) {
                             next({ ...to, replace: true })
                           } else {
                             // 跳转到目的路由
                             next({ path: '/404' })
                           }
                       })
                   // } else {
                   //     track('未登录状态',to,from);
                   //     next({ path: loginRoutePath });
                   // }

    `           } else {
                       next()
               }})

这里的store.dispatch('GenerateRoutes', { userRole }).then( () => {}),就是处理下权限的问题,进行过滤

const permission = {
  state: {
    routers: constantRouterMap,
    addRouters: [],
    permissionList:[],
  },

  mutations: {
    SET_ROUTERS: (state, routers) => {
      state.addRouters = routers
      state.routers = constantRouterMap.concat(routers)
      console.log( state.routers,'commit执行之后基本路由和动态路由')
      
    }
  },
  actions: {
    GenerateRoutes ({ commit }, data,state) {
      return new Promise(resolve => {
        const { userRole } = data;
        if(userRole ==='ROLE_ADMIN'){
            permission.state.permissionList =[];
        }else{
            permission.state.permissionList = ['recording','account','dictionary'];
        }
        const accessedRouters = filterAsyncRouter(asyncRouterMap, userRole);
        //这里的filterAsyncRouter就是去处理权限路由的,返回给我的就是已经处理好的路由list
        commit('SET_ROUTERS', accessedRouters)
        resolve()
      })
    }
  }
}

现在的问题就是router.addRoutes(store.getters.addRouters)这里硬是跳不过去,然后路由也出现了死循环。怎么解?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

你这user.isLogin是啥,你处理完权限也没改变下状态,那他每次都进来判断,处理完应该修改下这个状态吧


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
...