开发喵星球

若依前后端分离默认跳转到第一个子菜单(152)

在开启TopNav需要点击主菜单时,想默认跳转到第一个子菜单可以在handleSelect事件处理。

// 菜单选择事件处理函数
handleSelect(key, keyPath) {
  // 将当前选中的菜单项保存到this.currentIndex中
  this.currentIndex = key;

  // 判断当前菜单项是否为外部链接(以http或https开头)
  if (this.ishttp(key)) {
    // 如果是外部链接,则在新窗口中打开该链接
    window.open(key, "_blank");
  } else if (key.indexOf("/redirect") !== -1) {
    // 如果是重定向路径(以/redirect开头),则在内部打开该链接
    // 将/redirect替换为空字符串,获取真实路径
    this.router.push({ path: key.replace("/redirect", "") });
  } else {
    // 如果是普通菜单项
    // 显示左侧联动菜单
    this.activeRoutes(key);

    // 根据选中的菜单项,获取其子菜单列表
    let myRoutes = [];
    if (this.childrenMenus && this.childrenMenus.length>0) {
      this.childrenMenus.map((item) => {
        if (key == item.parentPath || (key == "index" && "" == item.path)) {
          myRoutes.push(item);
        }
      });
    }

    // 切换路由
    setTimeout(() => {
      // 如果第一个子菜单的路径不等于当前路由路径,则替换当前路由为第一个子菜单的路径
      if (myRoutes[0].path != this.route.path) {
        this.router.replace({
          path: myRoutes[0].path
        })
      } else {
        // 如果第一个子菜单的路径等于当前路由路径,则替换当前路由为/index路径
        this.router.replace({
          path: '/index'
        })
      }
    }, 100)
  }
},

代码解析:
handleSelect(key, keyPath):菜单选择事件处理函数,接收两个参数,key为选中的菜单项的唯一标识,keyPath为菜单项的路径。
this.currentIndex = key;:将当前选中的菜单项保存到this.currentIndex中,用于后续逻辑处理。
this.ishttp(key):判断当前菜单项是否为外部链接,即以httphttps开头的链接。
this.$router.push({ path: key.replace("/redirect", "") }):如果菜单项的路径以/redirect开头,则在内部打开该链接,将/redirect替换为空字符串,获取真实路径,然后使用this.$router.push()方法跳转至该路径。
this.activeRoutes(key):显示左侧联动菜单,根据选中的菜单项激活对应的左侧菜单项。
myRoutes:根据选中的菜单项获取其子菜单列表。
this.$route.path:获取当前路由的路径。
this.$router.replace():替换当前路由路径为指定的路径。

   
分类:Java/OOP 作者:无限繁荣, 吴蓉 发表于:2024-03-19 19:37:35 阅读量:152
<<   >>


powered by kaifamiao