请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

这节有点看不懂,关于generateMenus

老师,这节我有些看不懂,需要你耐心帮我指导下。我认为generateMenus主要处理不符合规则的路由,但是1.我认为只有不存在meta.title的路由就不该存在左侧菜单,这个理解对不对?2.为啥要判断children,判断children是为了判断子类是否有meta.title吗?那父类都不挂载再菜单了,会存在子类出现在菜单列表吗

正在回答 回答被采纳积分+3

1回答

Sunday 2023-03-16 22:08:24

你好

  1. title 和 icon 是成套出现的,也就是必须要有 title 同时要存在 icon

  2. children 表示子节点,这是为了处理存在二级或者三级节点的场景

0 回复 有任何疑惑可以回复我~
  • 看了一下午,我终于懂了。老师你帮我看下我说的对不对。generateMenus分为三种情况:1.没有meta,没有children,直接return 2.没有meta,有children,那存在children有显示在左侧菜单的情况,所有需要再次递归调用generateMenus;3.有meta,先去处理是当前路由否符合同时存在title和icon,符合则放入result,在去处理当前路由的children
    export function generateMenus(routes) {
      const result = [];
      routes.forEach((item) => {
        // 不存在 children && 不存在 meta 直接 return
        if (isNull(item.meta) && isNull(item.children)) return;
    
        // 存在 children 不存在 meta,进入迭代
        if (isNull(item.meta) && !isNull(item.children)) {
          result.push(...generateMenus(item.children));
          return;
        }
        // 定义一个route对象 符合条件的route才会被放在result里
        const route = {
          ...item,
          children: []
        };
    
        // 存在meta.icon&&meta.title 才符合菜单显示
        if (route.meta.icon && route.meta.title) {
          // meta 存在生成 route 对象,放入 arr
          result.push(route);
        }
        if (!isNull(item.children)) {
          route.children.push(...generateMenus(item.children));
        }
      });
      return result;
    }
    老师,我剔除掉同名路由的情况,这样写可以吗?我感觉同名路由出现应该算是前端自己写的bug吧
    回复 有任何疑惑可以回复我~ 2023-03-17 09:24:47
  • 老师  可否帮我看下这个问题
    回复 有任何疑惑可以回复我~ 2023-03-20 09:28:39
  • 你剔除掉同名父路由后,到后面的权限那里就会出问题的,我已经试过了
    回复 有任何疑惑可以回复我~ 2023-05-03 21:42:29
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信