Tab切换时如何实现前端路由不刷新页面?
我在用 Vue 做一个带 Tab 的管理后台,点了不同 Tab 想通过前端路由切换内容,但又不想整个页面刷新。试过直接改 this.$router.push,结果页面确实没刷,但浏览器前进后退按钮失效了,而且手动输入 URL 也进不到对应 Tab。
目前 Tab 是用 v-show 控制显示隐藏的,但这样没法和路由联动。有没有办法让每个 Tab 对应一个路径,比如 /dashboard/user 和 /dashboard/order,切换时只更新内容区?
<template>
<div>
<nav>
<router-link to="/user">用户</router-link>
<router-link to="/order">订单</router-link>
</nav>
<router-view />
</div>
</template>
正确的做法是用 Vue Router 的嵌套路由(child routes),让每个 Tab 对应一个子路由:
路由配置:
父组件 DashboardLayout.vue:
这样切换时:
- URL 会变成 /dashboard/user、/dashboard/order
- 浏览器前进后退完全正常
- 手动输入 URL 也能直接进到对应 Tab
- 只有
前进后退失效的根因就是你之前没用真正的路由嵌套,而是用 v-show 在同一个组件里切显示隐藏。改成嵌套路由后,Vue Router 会自动处理浏览器历史记录,这问题就解决了。