JS通过子级来寻找父级及以上连接关系(可应用于面包屑)

应用场景:以vue3+TS+pinia为框架搭建的后台管理系统,由于做了路由的三级及三级以上的keep-alive缓存,需要手动来实现面包屑功能。

一、mock数据

[
      {
        path: "/layout/home",
        name: "homes",
        meta: { title: "首页" },
        children: [],
      },
      {
        path: "/page",
        name: "page",
        meta: { title: "页面", rootName: "page" },
        children: [
          {
            path: "/page/page1",
            name: "page1",
            meta: { title: "页面1", parentID: "page", rootName: "page" },
            children: [
              {
                path: "/page/page1/page1-1",
                name: "page1-1",
                meta: { title: "页面1", parentID: "page1", rootName: "page" },
              },
            ],
          },
          {
            path: "/page/page2",
            name: "page2",
            meta: { title: "页面2", parentID: "page", rootName: "page" },
            children: [],
          },
        ],
      },
]

二、处理逻辑

  actions: {
    /**
     *
     * @param targetRoute 目标路径
     * @param rootTree 路径节点
     * @returns 是否找到 找到不继续进行了
     */
    findParentPath(targetRoute: Router, rootTree: Router[]): Boolean {
      for (let i = 0; i < rootTree.length; i++) {
        let itemTree = rootTree[i];
        // 匹配上记录一下
        if (targetRoute.name == itemTree.name) {
          this.breadcrumbsList.unshift(itemTree);
          return true;
        }
        // 查找子集
        if (itemTree.children && itemTree.children.length > 0) {
          let result = this.findParentPath(targetRoute, itemTree.children);
          // 如果在子集中找到需要将此项记录
          if (result) {
            this.breadcrumbsList.unshift(itemTree);
            return true;
          }
        }
      }
      return false;
    },
  },

四、调用

    /**
     * 路径匹配
     * @param item 当前路由项
     */
    matchingPath(itemTree: Router) {
      // 清空面包屑列表
      this.breadcrumbsList = [];
      //   根节点
      let rootTree = this.menuTree.filter(
        (item) => item.meta.rootName == itemTree.meta.rootName
      );
      if (rootTree[0]) {
        this.findParentPath(itemTree, rootTree);
      }
    }
 //最终的数据格式展示为
//[{xxx:xxx},{xxx:xxx},{xxx:xxx},...]
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

面条不爱汤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值