Vue.js 路由导航失效急救手册:从点击无反应到 404 的全场景排查

在 Vue 项目里,路由突然“罢工”通常表现为:

  • 点击 <router-link> 毫无反应,地址栏不变
  • 手动刷新页面 404
  • 路由跳转后空白,控制台没有报错
  • 动态路由(如 /user/:id)刷新后参数丢失

本文把日常开发中高发的「路由导航失效」场景整理成「诊断 + 处方」形式,按顺序排查即可恢复导航。


一、先确认 3 个「生命体征」

检查项正常表现
router 实例已注册main.js / main.tsapp.use(router)
<router-view> 存在页面有挂载点
路由模式匹配服务器history 模式需服务器重定向,hash 模式无需

二、6 种高频故障与修复

1️⃣ 路由未注册:点击 <router-link> 无反应

症状
地址栏不变,控制台无报错。

原因
忘记 app.use(router)

// main.ts
import { createApp } from 'vue'
import router from './router'
const app = createApp(App)
app.use(router) // ✅ 必须注册
app.mount('#app')

2️⃣ 路由重复挂载:导航守卫死循环

症状
无限 RedirectMaximum call stack size exceeded

原因
在全局守卫里 next('/login') 未加条件。

// ❌ 死循环
router.beforeEach((to, from, next) => {
  if (!isLogin) next('/login')
  next()
})

修复

router.beforeEach((to, from, next) => {
  if (!isLogin && to.path !== '/login') {
    next('/login')
  } else {
    next()
  }
})

3️⃣ 404 刷新:History 模式未配置服务器

症状
开发环境正常,生产环境刷新 404。

原因
history 模式需要服务器把任意路径回退到 index.html

修复示例(Nginx)

location / {
  try_files $uri $uri/ /index.html;
}

临时方案:改成 hash 模式

const router = createRouter({
  history: createWebHashHistory(),
  routes
})

4️⃣ 动态路由参数丢失:刷新后 :id 变 undefined

症状
/user/123 → 刷新 → this.$route.params.idundefined

原因
路由懒加载 + 动态导入时未正确传递参数。

修复
确保动态导入的组件正常接收 props: true

{
  path: '/user/:id',
  name: 'User',
  component: () => import('@/views/User.vue'),
  props: true
}

并在组件中用 props: ['id']useRoute().params.id 取值。


5️⃣ 路由守卫异步逻辑未等待

症状
守卫里做 await 校验,但导航提前放行。

原因
忘记 next() 放在 await 之后。

修复

router.beforeEach(async (to, from, next) => {
  const hasAuth = await checkAuth()
  hasAuth ? next() : next('/login')
})

6️⃣ <router-link> 写法错误

症状
点击地址栏不变,控制台无报错。

原因
错误使用了字符串拼接或相对路径。

<!-- ❌ 错误示例 -->
<router-link to="'/user/' + userId">Profile</router-link>

<!-- ✅ 正确示例 -->
<router-link :to="{ name: 'User', params: { id: userId } }">
  Profile
</router-link>

三、一键排查脚本

在浏览器控制台执行以下代码,快速确认:

// 1. 路由实例是否存在
console.log(!!window.__VUE_ROUTER__)

// 2. 当前路由信息
console.log(router.currentRoute.value)

// 3. 已注册路由表
console.log(router.getRoutes())

四、一句话总结

路由导航失效 90% 是「注册 + 配置 + 服务器」三件事没对齐。
按「注册 → 守卫 → 服务器 → 语法」顺序排查,导航即可秒恢复。


最后问候亲爱的朋友们,并邀请你们阅读我的全新著作

📚 《Vue.js 3企业级项目开发实战(微课视频版》

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JJCTO袁龙

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

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

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

打赏作者

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

抵扣说明:

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

余额充值