利用vue-router跳转的几种方式

本文详细介绍了VueRouter中如何使用`<router-link>`和相关API(push,replace,go)进行页面跳转,包括路径参数、params和query的传递,以及push和replace对历史栈的不同操作。

​1 <router-link>
2 this.$router.push

   跳转到指定路径,并将跳转页面压入history栈中,也就是添加了一个页面记录。
3 this.$router.replace

   跳转到指定路径,将history栈中的当前页面替换为跳转到的页面。
4 this.$router.go(n)

   在histroy栈中向前或者向后跳转n个页面,n可为正整数或负整数。


<router-link to>

1.不带参数

<router-link :to="/home"></router-link>

<router-link :to="{name:'home'}"></router-link>

<router-link :to="{path:'/home'}"></router-link>

直接写路径或者根据vue-router的配置文件(index.js),构建一个对象使用name属性或者path属性都行, 建议用name。

2.路径参数(pathvariable)

<router-link to = "/跳转路径/传入的参数"></router-link>

例如:

<router-link :to="`/adddoc/${record.id}`">

to的属性值是`/adddoc/${record.id}`表达式的计算结果

  • 路径样式                         /跳转路径/传入的参数  /ebook/1
  • 路由index.js配置path     {path:/ebook/:id,name:ebook,component:Ebook}
  • 取参数                            HTML: $route.params.id (用取值表达式写在templat中)       
                                           Script: this.$route.params.id (写在JS代码中)

3.params传递参数(url后面会显示/value,路径传参的另一种写法)
如果说路径传参是纯手写,那么params传参就是由vue-router帮助构建的路径传参

<router-link :to="{name:'home', params: {id:10001}}"></router-link>
<router-link :to="{name:'adddoc', params: {eid:`${record.id}`}}"></router-link>

  • 路径样式         /home/10001  ,/adddoc/1
  • 路由index.js配置path    path:"/home/:id" 或者 path: "/adddoc:eid"  (省略了name和component)路由index.js如果不配置path ,第一次可请求,刷新页面id会消失;配置path,刷新页面id会保留。使用params必须要注意的是,params属性中,传递参数使用的参数名称必须与index.js中path配置的名称对应上path配置时使用:id,传递参数时就要用params:{id:xxx},配置时使用:eid,传递参数时就要用params:{eid:xxx}
  • 取参              HTML: $route.params.id      
                         Script:  this.$route.params.id

4.query传递参数(类似get,url后面会显示 ?name=value)

 <router-link :to="{name:'home', query: {id:10001}}"></router-link>
 <router-link :to="{name:'adddoc', query: {eid:`${record.id}`}}"></router-link>
  •  路径样式         /home?=10001  ,/adddoc?eid=1
  •  路由index.js不用做path的额外配置(因为query参数根本就不是路径的一部分)
  •  取参               HTML取出 $route.query.id  ,  $route.query.eid
                           Script取出  this.$route.query.id  ,this.$route.query.eid

push跳转

整体思路与<router-link to>是一样的

1. 不传参

 this.$router.push('/adddoc');

 this.$router.push({name:'adddoc'});

 this.$router.push({path:'/adddoc'});

2. 路径传参

 this.$router.push('/adddoc/21');
  •  需要在router index.js中进行路径配置,配置方式与<router-link to>的路径传参方式一样   path:/adddoc:eid (省略了name和component)
  •  取参的方式与<router-link to>的路径传参方式一样
     HTML: $route.params.eid
     Script: this.$route.params.eid

3. params传参(路径传参的另一种写法)

 this.$router.push({name:'adddoc',params: {eid:'24'}})

push函数中,params只能与name配合使用。使用path会导致白屏(但是没有异常)

  •  需要在router index.js中进行路径配置,配置方式与<router-link to>的路径传参方式一样
     path:/adddoc:eid name:adddoc component AddDoc
  •  取参的方式与<router-link to>的params取参方式一样
     HTML: $route.params.eid
     Script: this.$route.params.eid

4. query传参

this.$router.push({name:'adddoc',query: {eid:'24'}})
this.$router.push({path:'/adddoc',query: {eid:'24'}})

与<router-link to>的query传参方式一样不需要path配置
取参的方式与<router-link to>的params取参方式一样
HTML: $route.query.eid
script: this.$route.query.eid


replace跳转

replace跳转的写法和含义与push一模一样(不再赘述)
replace与push的区别在于对histroy栈的操作不一样,push是压入栈新的页面,replace则是用新页面替代栈中当前的页面。


go跳转


this.$router.go(-1);  // 在浏览器记录中后退一步记录,等同于 history.back()
this.$router.go(1);   // 在浏览器记录中前进一步,等同于 history.forward()


<think> 我们被要求回答关于vue-router跳转方式。根据用户的问题和之前的引用内容,我们可以总结出以下几种跳转方式: 1. 声明式导航:使用<router-link>组件 2. 编程式导航:使用router.push、router.replace、router.go等方法 同时,我们注意到引用中提到了两种传递参数的方式:query和params。 现在,我们将详细说明这些跳转方式,并在适当的地方引用之前的参考内容。 具体回答结构如下: 1. 声明式导航(<router-link>) 2. 编程式导航(使用router实例的方法) a. router.push b. router.replace c. router.go 3. 传递参数的两种方式:query和params 4. 总结 注意:根据引用[3]和[4],我们需要区分query和params传参的区别,以及它们的使用方法。 同时,我们还需要注意,在引用[2]中提到了路由的原理(hash模式和history模式),但用户的问题是关于跳转方式,所以我们只专注于跳转方式本身。 另外,根据引用[1]和[3],我们了解到router.push是编程式导航的重要方法。 下面开始组织回答: </think>### Vue Router 跳转方式详解 Vue Router 提供了**声明式导航**(模板)和**编程式导航**(JS代码)两种跳转方式,支持参数传递和路由控制: --- #### 一、声明式导航(`<router-link>`) 在模板中通过组件实现跳转: ```vue <!-- 基本跳转 --> <router-link to="/home">首页</router-link> <!-- 带动态参数(query传参) --> <router-link :to="{ path: '/user', query: { id: 1001 } }"> 用户页 </router-link> <!-- 命名路由+params传参(URL显示/value)[^4] --> <router-link :to="{ name: 'profile', params: { uid: 'u100' } }"> 个人资料 </router-link> ``` **特点**: - `query` 参数在 URL 显示为 `?id=1001`,刷新后参数保留 - `params` 参数在 URL 显示为 `/u100`,需配合命名路由使用,刷新后需额外处理保留[^3] --- #### 二、编程式导航(JS控制) 通过 `this.$router` 实例方法动态跳转: | **方法** | **说明** | **示例** | |------------------|--------------------------------------------------------------------------|--------------------------------------------------------------------------| | `push()` | 跳转到新路由(保留浏览历史)[^1] | `this.$router.push('/home')` <br> `this.$router.push({ name: 'user', params: { id: 1 } })` | | `replace()` | 替换当前路由(不保留历史)[^3] | `this.$router.replace('/login')` | | `go(n)` | 前进/后退历史记录 | `this.$router.go(-1)` // 后退一页 | | `push` + `query` | 通过 URL 参数传值(适合非敏感数据)[^3] | `this.$router.push({ path: '/search', query: { keyword: 'vue' } })` | **参数传递对比**: ```javascript // 1. query传参 → /user?id=1001 this.$router.push({ path: '/user', query: { id: 1001 } }) // 2. params传参 → /user/1001 (需路由配置name) this.$router.push({ name: 'user', params: { id: 1001 } }) ``` --- #### 三、路由原理与参数处理 1. **路由模式**: - **Hash 模式**:URL 包含 `#`(如 `http://xxx.com/#/home`),通过监听 `hashchange` 实现无刷新跳转[^2] - **History 模式**:URL 无 `#`,依赖 HTML5 History API(需服务器支持) 2. **参数接收**: 在目标组件中通过 `$route` 获取参数: ```javascript // 接收query参数 const id = this.$route.query.id // 接收params参数 const uid = this.$route.params.uid ``` --- #### 四、使用场景总结 | **场景** | **推荐方式** | **原因** | |------------------------|----------------------|------------------------------| | 菜单导航 | `<router-link>` | 语义化清晰,自动激活样式 | | 按钮触发跳转 | `this.$router.push` | 灵活控制逻辑(如提交后跳转) | | 登录后替换当前页 | `replace()` | 避免回退到登录页 | | 敏感数据传递 | `params` + 命名路由 | 参数不在 URL 明文显示[^3] | > 提示:动态路由(如 `/user/:id`)需提前在路由配置中定义参数占位符。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值