侧边栏

位置:首页 / 技术中心 / 杂项

杂项 Admin 2026-04-26 22:04:06 38

## 问题解决总结

### 一、问题根源

点击"单位库"子菜单时,URL会先跳转到 /unitManagementRepository ,然后快速跳转到 /gridAddress 。


根本原因是事件冒泡 :


1. 点击子菜单时,先触发 el-menu 的 @select 事件,执行路由跳转到对应页面

2. 由于事件冒泡,点击事件会传递到父级 el-submenu ,触发 @click.native 事件,又跳转到默认页面

### 二、解决方案

第一步:重构菜单事件处理


- 使用 Element UI 的 @select 事件(菜单选择的标准事件)处理所有子菜单点击

- 将之前分散的 handleMenuItemClick 和 handleSubmenuClick 合并为统一的 handleMenuSelect 方法

第二步:处理一级菜单点击


- 为 el-submenu 添加 @click.native 事件监听一级菜单点击

- 在处理函数中添加判断逻辑, 只有点击一级菜单标题时才执行跳转 ,点击子菜单项时不执行任何操作:

```

handleSubmenuTitleClick(index, event) {

  const target = event.target;

  const isMenuItem = target.closest('.

  el-menu-item');

  if (!isMenuItem) {

    // 只有点击一级菜单标题时才跳转

    this.$router.push({ path: "/

    gridAddress", query: { t: Date.now

    () } });

  }

}

```

### 三、为什么要加 query: { t: Date.now() }

这是为了 强制路由刷新 。Vue Router 默认会复用组件实例来优化性能,但有时会导致:


- 同一路由切换时页面不更新

- 组件的生命周期钩子(如 mounted )不触发

添加时间戳参数后:


- 每次跳转的 URL 都是唯一的(因为时间戳不同)

- 强制 Vue Router 认为这是一个新的路由导航

- 确保页面组件被正确重建和渲染

### 最终效果

- 点击"单位管理"一级菜单:展开子菜单并跳转到"标准地址库"

- 点击"标准地址库"子菜单:跳转到 /gridAddress 页面

- 点击"单位库"子菜单:跳转到 /unitManagementRepository 页面(不再被覆盖)

18455111359 扫描二维码