You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据路由变化更新Vue JS动态菜单项的params参数

问题根因

当前导航配置是ES模块静态导出的,文件顶部读取token、导出导航数组的逻辑只会在应用首次加载模块时执行一次。后续下拉切换项目触发路由跳转时,静态导出的导航数组不会重新计算,菜单项里绑定的token永远是首次加载拿到的旧值,所以链接不会同步更新。

修复方案

1. 调整静态导航配置,移除硬编码的token读取逻辑

打开@/navigation/project.js文件,删掉文件顶部所有读取localStorage、手动解析URL取token的代码,不要在配置里写死token值,改成如下结构:

export default [
    {
        header: "Projects",
    },
    {
        title: "Import",
        route: {
            name: "project-import",
            params: { token: null },
        },
        icon: "SettingsIcon",
    },
];

其他导航子文件如果也有依赖动态token的配置,按同样方式处理即可,不需要在静态文件里提前读取token。

2. 修改LayoutVertical.vue,实现导航响应式更新

原代码直接把导入的静态导航数组存在data里,不会随路由变化更新,改成监听路由参数变化、动态注入最新token的逻辑即可,修改后代码如下:

<template>
  <layout-vertical :nav-menu-items="navMenuItems">
    <router-view />
    <app-customizer
      v-if="showCustomizer"
      slot="customizer"
    />
  </layout-vertical>
</template>

<script>
import LayoutVertical from '@core/layouts/layout-vertical/LayoutVertical.vue'
import AppCustomizer from '@core/layouts/components/app-customizer/AppCustomizer.vue'
import { $themeConfig } from '@themeConfig'
import rawNavMenuItems from '@/navigation/vertical'

export default {
  components: {
    AppCustomizer,
    LayoutVertical,
  },
  data() {
    return {
      showCustomizer: $themeConfig.layout.customizer,
      navMenuItems: this.updateNavToken(rawNavMenuItems, this.$route.params.token)
    }
  },
  watch: {
    '$route.params.token'(newToken) {
      this.navMenuItems = this.updateNavToken(rawNavMenuItems, newToken)
    }
  },
  methods: {
    updateNavToken(navItems, token) {
      return navItems.map(item => {
        const newItem = { ...item }
        // 替换当前菜单项路由里的token
        if (newItem.route?.params && 'token' in newItem.route.params) {
          newItem.route.params.token = token
        }
        // 递归处理子菜单
        if (newItem.children?.length) {
          newItem.children = this.updateNavToken(newItem.children, token)
        }
        return newItem
      })
    }
  }
}
</script>
逻辑说明
  • 首次加载页面时,会直接从当前路由参数里读取token注入导航配置,和原有表现一致
  • 切换下拉选项触发路由跳转后,watch会监听到路由token的变化,自动重新生成带新token的导航数组传给侧边栏组件,菜单项链接会同步更新
  • 该逻辑不依赖localStorage的读写时序,直接从路由源数据取token,刷新页面时也能自动拿到当前URL对应的正确token

内容的提问来源于stack exchange,提问作者Shibbir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 00:51:23