vue router编程式导航通过this.$router调用push、replace、go实现:push添加历史记录支持返回,replace替换当前记录不可返回,go控制前进/后退;均支持字符串、对象(path/name+params/query)传参,且push/replace支持回调或promise。

Vue Router 的编程式导航,就是不用 <router-link></router-link>,而是直接在 JavaScript 代码里调用方法跳转。核心是通过 this.$router(组件内)或全局 router 实例调用 push、replace、go 这三个方法。
router.push:添加新历史记录,支持后退
这是最常用的方式,效果等同于点击 <router-link></router-link>。它会在浏览器历史栈中新增一条记录,用户可点“返回”回到上一页。
- 传字符串路径:
this.$router.push('/home') - 传对象(推荐):
this.$router.push({ path: '/user', query: { id: 123 } })→ 跳转到/user?id=123 - 用命名路由 + params(适合带动态参数的路径):
this.$router.push({ name: 'user', params: { userId: 123 } })→ 自动拼出/user/123(前提是路由配置了name: 'user'和path: '/user/:userId') - 注意:
path和params不能混用——如果写了path,params会被忽略;想传参数必须用name或手写完整路径
router.replace:替换当前历史记录,无法后退
效果等同于 <router-link :to="..." replace></router-link>。它不会新增历史条目,而是把当前这条替换成目标页,所以点浏览器“返回”会跳过它。
- 用法和
push几乎一样:this.$router.replace({ name: 'login' }) - 典型场景:登录成功后跳首页,不希望用户点返回又回到登录页;表单提交后重定向,避免重复提交
router.go:在历史记录中前进或后退
相当于模拟浏览器的前进/后退按钮,参数是整数:n > 0 表示前进 n 步,n 表示后退 <code>|n| 步。
-
this.$router.go(-1)→ 后退一页(等价于浏览器返回) -
this.$router.go(1)→ 前进一页 -
this.$router.go(0)→ 刷新当前页(不推荐,可用location.reload()替代)
补充说明:回调与 Promise
在 Vue Router 2 中,push 和 replace 支持传入成功和失败回调:
this.$router.push(location, () => { /* 导航成功 */ }, (err) => { /* 导航被阻止或出错 */ })- 如果环境支持 Promise(如现代浏览器),也可以直接用
.then().catch():this.$router.push(...).then(...).catch(...) - 这些回调或 Promise 在所有导航守卫执行完毕、视图更新完成后才触发
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










