tree结构数据,根据子级某字段参数匹配所有父级的数据

1 篇文章 0 订阅
1 篇文章 0 订阅

最近在搭建react+antd的后台管理系统模板,碰到面包屑组件,需要根据左侧菜单栏当前选中的数据,再往上查找所有的父节点数据,即可使用下面这种方法返回正确的数据,真实业务场景中这种情况也不少见。废话不多说,直接上代码,CV即可用

1、 测试数据
// 测试数据
const routes = [
    {
        path: "/init",
        element: 'init/index',
        isParent: true,
        meta: {
            title: '初始也没',
            icon: 'AppstoreOutlined',
            keepAlive: false,
            hiddenInMenu: false,
            hideChildrenInMenu: false,
        },
        children: [
            {
                path: "/init/test",
                element: "init/index",
                meta: {
                    title: '测试子菜单',
                    icon: '',
                    keepAlive: false,
                    hiddenInMenu: false,
                    hideChildrenInMenu: true
                },
            }
        ]
    },
    {
        path: "/home",
        element: 'home/index',
        isParent: true,
        meta: {
            title: 'home页面',
            icon: 'AppstoreOutlined',
            keepAlive: false,
            hiddenInMenu: false,
            hideChildrenInMenu: false,
        },
        children: [
            {
                path: "/home/test",
                element: "home/index",
                meta: {
                    title: '测试home子菜单',
                    icon: '',
                    keepAlive: false,
                    hiddenInMenu: false,
                    hideChildrenInMenu: true
                },
            }
        ]
    },
]
2、封装工具函数
// 封装工具函数
const formatBreadcrumbRoutes = (routes, fn, result = []) => {
    if (!routes) return []
    for (const data of routes) {
        result.push(data.path) // 这里时最终返回的数组列表,我取的是path路径
        if (fn(data)) return result
        if (data.children) {
            const findChildren = formatBreadcrumbRoutes(data.children, fn, result)
            if (findChildren.length) return findChildren
        }
        result.pop()
    }
    //走到这说明没找到目标
    return []
}
3、测试
formatBreadcrumbRoutes(routes, data => data.path === '/init/test')

测试返回结果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
el-select-tree 是 Element UI 提供的一个树形选择组件,可以实现多级树结构的选择功能。在 el-select-tree 中,回显显示级及所选的所有级可以通过以下步骤实现: 1. 首先,需要准备一个树形数据源,数据源中每个节点包含一个唯一的标识符(如 id),以及节点的标识符(如 parentId)。 2. 在 el-select-tree 中,使用 v-model 绑定一个变量来保存所选的节点。 3. 在 el-select-tree 的模板中,设置 show-all-levels 属性为 true,以显示所有层级的节点。 4. 在 el-select-tree 的模板中,使用 scoped slot 来自定义每个节点的显示内容。在 scoped slot 中,可以根据节点的层级关系来添加前缀或样式,以区分级和级节点。 5. 在 el-select-tree 的模板中,使用 filter-node-method 属性来自定义过滤节点的方法。在过滤方法中,可以根据节点的层级关系来判断是否显示该节点。 下面是一个示例代码: ```html <template> <el-select-tree v-model="selectedNode" :data="treeData" show-all-levels :filter-node-method="filterNode"> <template slot-scope="{ node }"> <span v-if="node.level === 0" style="font-weight: bold">{{ node.label }}</span> <span v-else>{{ '└─'.repeat(node.level) }}{{ node.label }}</span> </template> </el-select-tree> </template> <script> export default { data() { return { selectedNode: null, treeData: [ { id: 1, parentId: null, label: 'Node 1' }, { id: 2, parentId: 1, label: 'Node 1-1' }, { id: 3, parentId: 2, label: 'Node 1-1-1' }, { id: 4, parentId: 2, label: 'Node 1-1-2' }, { id: 5, parentId: 1, label: 'Node 1-2' }, // 其他节点... ] }; }, methods: { filterNode(node, keyword) { // 过滤方法示例,根据节点的层级关系判断是否显示该节点 if (node.level === 0 || node.label.includes(keyword)) { return true; } return false; } } }; </script> ``` 在上述示例中,el-select-tree 组件绑定了一个变量 selectedNode,用于保存所选的节点。treeData 是树形数据源,包含了多个节点。通过设置 show-all-levels 属性为 true,可以显示所有层级的节点。使用 scoped slot 来自定义每个节点的显示内容,并根据节点的层级关系添加前缀或样式。通过 filter-node-method 属性来自定义过滤节点的方法,根据节点的层级关系判断是否显示该节点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值