vueComponent / pro-components

easy use `Ant Design Vue` layout
MIT License
535 stars 214 forks source link

selectedKeys 参数设计疑惑 #162

Closed jekip closed 2 years ago

jekip commented 2 years ago

疑惑

  1. 按照文档给出的示例是,selectedKeys: ['/welcome'] 很容易让我联想到内部,menu组件用 路由 path 绑定key,来做菜单选中; 实际测试结果,并不需要 /,就可以选中菜单;
  2. 如果安装 path/或者说是fullPath,当嵌套路由的场景下,比如,这样/system/user ,经测试,需要传递 ['user'] 菜单才会选中; 3.为何没有用name来做选中菜单唯一标识;
  3. 目前遇到的不便利之处在于,当嵌套路由,通过 useRoute 获取到的信息,都是这样/system/user 的路径,而组件内部只需要 ['user'] ,如果用name则不需要额外处理
sendya commented 2 years ago

3x 版本的 menu key 已经完全交给用户控制数据了,通过 menuData 可以定义出任意关系。

你的这些疑惑我认为你还是需要看 examples,你的 selectedKeys 是由你指定的,菜单的 key 实际上也是你自己指定的,只不过是获取 menuData 的每一项 path 属性。你的 path 写的有问题,应该处理一下 看这里 https://github.com/vueComponent/pro-layout/blob/next/examples/layouts/BasicLayout.vue#L137

image

jekip commented 2 years ago

感谢回复,selectedKeys 传入 path 数组,一般习惯嵌套路由,都是如下定义方式:

const routes = [
  {
    path: '/setting',
    name: 'setting',
    children: [
       {
        path: 'account',
        name: 'account',
      },
    ],
  },
]

这种定义方式,还需要借助js去拼接一个完整是path路径才能实现选中,拼接成这样 [ '/setting', '/setting/account']

上面的定义方式,通过示例 examples/layouts/BasicLayout.vue中方法,也不行,path没对应上

或者说直接在路径里面这样写,就不需要额外去处理了,按示例方式 可行

const routes = [
  {
    path: '/setting',
    name: 'setting',
    children: [
       {
        path: '/setting/account',
        name: 'account',
      },
    ],
  },
]

作者有比较好的方式处理这种情况吗?

jekip commented 2 years ago

解决了,借鉴 formatRelativePath 方法,转换一下 path,满足需求,谢谢~

sendya commented 2 years ago

pro-layout 有提供两个辅助菜单方法,你能别当做没看到好吗