查看: 99|回复: 1

Vue路由跳转:router-link与this.$router.push用法及params/query传参区别

[复制链接]
发表于 3 小时前 | 显示全部楼层 |阅读模式
Vue单页应用开发中,路由跳转是最常见的操作之一。本文总结Vue Router提供的几种跳转方式,重点区分params和query传参的差异,并结合代码示例说明。

一、声明式导航:router-link

使用<router-link>标签可以直接在模板中跳转,它会渲染为<a>标签,但会阻止默认页面刷新。
  1. <!-- 直接跳转,不带参数 -->
  2. <router-link to="/testDemo">
  3.   <button>点击跳转</button>
  4. </router-link>
  5. <!-- 带query参数,地址栏可见 -->
  6. <router-link :to="{path:'testDemo', query:{setid:123456}}">
  7.   <button>点击跳转(query)</button>
  8. </router-link>
  9. <!-- 带params参数,地址栏不可见 -->
  10. <router-link :to="{name:'testDemo', params:{setid:1111222}}">
  11.   <button>点击跳转(params)</button>
  12. </router-link>
复制代码

注意:使用params时必须配合name,不能只用path,否则params会被忽略。

二、编程式导航:this.$router.push()

在方法中通过$router.push()跳转更灵活,常用于按钮点击、登录验证等逻辑。
  1. <template>
  2.   <div>
  3.     <button @click="goTo">点击跳转</button>
  4.   </div>
  5. </template>
  6. <script>
  7. export default {
  8.   methods: {
  9.     goTo() {
  10.       // 直接跳转
  11.       this.$router.push('/testDemo');
  12.       
  13.       // 带query参数(地址栏可见)
  14.       this.$router.push({path:'/testDemo', query:{setid:123456}});
  15.       
  16.       // 带params参数(地址栏不可见)
  17.       this.$router.push({name:'testDemo', params:{setid:111222}});
  18.     }
  19.   }
  20. }
  21. </script>
复制代码

三、params与query传参的对比

1. 请求方式类比:query传参类似HTTP GET请求,参数拼接在URL中,刷新页面后参数依然存在;params传参类似HTTP POST请求,参数不显示在URL中,但刷新页面时参数会丢失(除非在路由配置中动态路径)。

2. 地址栏表现:
- path + query:地址栏显示为 /testDemo?setid=123456
- name + params:地址栏显示为 /testDemo(参数不可见)

3. 接收参数:目标组件内通过 $route 对象获取(注意是$route,不是$router)。
  1. <template>
  2.   <div>
  3.     testDemo {{ this.$route.query.setid }}
  4.   </div>
  5. </template>
复制代码
对应接收params的方式:this.$route.params.setid。

四、a标签跳转:只能跳转站外链接
  1. <a href="https://www.baidu.com"><button>跳转百度</button></a>
复制代码
直接使用<a>标签跳转外部链接没问题,但无法实现Vue路由内部跳转(会刷新页面)。如需内部跳转,仍然推荐router-link或$router.push。

五、前进/后退:this.$router.go()
  1. // 后退一步,等同 history.back()
  2. this.$router.go(-1);
  3. // 前进一步,等同 history.forward()
  4. this.$router.go(1);
复制代码

也可以在模板中绑定按钮:
  1. <button @click="goBack">上一页</button>
  2. <button @click="goForward">下一页</button>
  3. methods: {
  4.   goBack() { this.$router.go(-1); },
  5.   goForward() { this.$router.go(1); }
  6. }
复制代码

六、综合示例:一个包含多种跳转方式的页面
  1. <template>
  2.   <div id="app">
  3.     <router-link to="/">[跳转到主页]</router-link>
  4.     <router-link to="/login">[登录]</router-link>
  5.     <router-link to="/logout">[登出]</router-link>
  6.    
  7.     <button @click="goHome">[跳转到主页]</button>
  8.     <button @click="goBack">[上一页]</button>
  9.     <button @click="goForward">[下一页]</button>
  10.   </div>
  11. </template>
  12. <script>
  13. export default {
  14.   name: "App",
  15.   methods: {
  16.     goHome() {
  17.       this.$router.push("/");
  18.     },
  19.     goBack() {
  20.       this.$router.go(-1);
  21.     },
  22.     goForward() {
  23.       this.$router.go(1);
  24.     }
  25.   }
  26. };
  27. </script>
复制代码

总结:
- 使用声明式导航(router-link)更语义化,适合静态链接。
- 编程式导航($router.push)适合逻辑跳转。
- 传参选query还是params取决于是否需要参数持久化:query刷新不丢失,params刷新丢失(除非使用动态路由)。
- 地址栏显示参数用query,隐藏参数用params。
- 前进后退用$router.go(n)。

掌握这些方式后,基本能满足Vue单页应用中的页面跳转需求。
回复

使用道具 举报

发表于 2 小时前 | 显示全部楼层

Re: Vue路由跳转:router-link与this.$router.push用法及params/query传参区别

总结得很详细,特别是params和query传参的区别,地址栏表现和刷新后参数是否保留这部分讲得很清楚,对新手非常友好。补充一点:使用params配合name时,如果路由配置里用了动态路径(比如 path: '/testDemo/:setid'),刷新后参数也不会丢失,接收时仍然用 $route.params.setid。感谢分享!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-6-12 21:02 , Processed in 0.025260 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部