如何處理vue router 路由傳參刷新頁(yè)面參數(shù)丟失
概述
常見(jiàn)場(chǎng)景:點(diǎn)擊列表的詳情,跳轉(zhuǎn)到詳情內(nèi)頁(yè),在內(nèi)頁(yè)根據(jù)傳遞的參數(shù)獲取詳情數(shù)據(jù)。

路由傳參一般有如下幾種方式,下面主要介編程式導(dǎo)航 router.push 的傳參方式:
方法一:通過(guò) params 傳參
路由配置如下:
{
path: '/detail/:id', //若id后面加?代表這個(gè)參數(shù)是可選的
name: 'detail',
component: Detail
}
通過(guò) $router.push 中 path 攜帶參數(shù)的方式
// 列表中的傳參
goDetail(row) {
this.$router.push({
path: `/detail/${row.id}`
})
}
// 詳情頁(yè)獲取參數(shù)
this.$route.params.id
通過(guò) $router.push 的 params 傳參
// 列表頁(yè)傳參
goDetail(row) {
this.$router.push({
name: 'detail',
params: {
id: row.id
}
})
}
// 詳情頁(yè)獲取
this.$route.params.id
注:這種方式的傳參,路徑用 name,路徑用 name,路徑用 name , 用 path 會(huì)獲取不到;如果在路由配置中沒(méi)有添加 /:id即 path: 'detail',url 中不會(huì)顯示 id,在詳情頁(yè)還是可以拿到參數(shù) id,但刷新后參數(shù)丟失。
以上這兩種方式,傳遞的參數(shù) id 會(huì)在 url 后面顯示,如圖:

傳遞的參數(shù)會(huì)暴露在網(wǎng)址中。
如果在路由中設(shè)置了params參數(shù) /:id,但是在跳轉(zhuǎn)的時(shí)候沒(méi)有傳遞參數(shù),會(huì)導(dǎo)致頁(yè)面沒(méi)有內(nèi)容或跳轉(zhuǎn)失敗,可在后面加 ?代表這個(gè)參數(shù)是可選的,即 /:id?
方法二:通過(guò) query 傳參
// 路由配置
{
path: '/detail',
name: 'detail',
component: Detail
}
// 列表頁(yè)
goDetail(row) {
this.$router.push({
path: '/detail',
query: {
id: row.id
}
})
}
// 詳情頁(yè)
this.$route.query.id
注:這種方式傳遞的參數(shù)會(huì)在地址欄的 url 后面顯示 ?id=?,類似于 get 傳參;query 必須配合 path 來(lái)傳參。
傳遞的參數(shù)是對(duì)象或數(shù)組
還有一種情況就是,如果通過(guò) query 的方式傳遞對(duì)象或數(shù)組,在地址欄中會(huì)被強(qiáng)制轉(zhuǎn)換成 [object Object],刷新后也獲取不到對(duì)象值。
此時(shí)可以通過(guò) JSON.stringify() 方法將要傳遞的參數(shù)轉(zhuǎn)換為字符串傳遞,在詳情頁(yè)再通過(guò) JSON.parse() 轉(zhuǎn)換成對(duì)象。
let parObj = JSON.stringify(obj)
this.$router.push({
path: '/detail',
query: {
'obj': parObj
}
})
// 詳情頁(yè)
JSON.parse(this.$route.query.obj)
這個(gè)方法雖然可以傳遞對(duì)象,若數(shù)據(jù)少還好,數(shù)據(jù)多的話地址欄就很長(zhǎng)了
注意:在所有的子組件中獲取路由參數(shù)是 $route不是 $router
以上 params 和 query 傳參方式對(duì)比:
- 通過(guò) $router.push 的 params + name 傳參,若路由中沒(méi)有設(shè)置params參數(shù),參數(shù)不會(huì)拼接在路由后面,但是頁(yè)面刷新參數(shù)會(huì)丟失。
- 通過(guò) $router.push 中 path 攜帶參數(shù)或通過(guò) query 傳參,參數(shù)會(huì)拼接在地址后面,會(huì)暴露信息。
方法三:使用 props 配合組件路由解耦
// 路由配置
{
path: '/detail/:id',
name: 'detail',
component: Detail,
props: true // 如果props設(shè)置為true,$route.params將被設(shè)置為組件屬性
}
// 列表頁(yè)
goDetail(row) {
this.$router.push({
path: '/detail',
query: {
id: row.id
}
})
}
// 詳情頁(yè)
export default {
props: {
// 將路由中傳遞的參數(shù)id解耦到組件的props屬性上
id: String
},
mounted: {
console.log(this.id)
}
}
此外,還可以通過(guò)把參數(shù)存在 sessionStorage 或 localStorage 中來(lái)解決頁(yè)面刷新參數(shù)丟失的問(wèn)題,具體結(jié)合實(shí)際項(xiàng)目即可。
以上就是如何處理vue router 路由傳參刷新頁(yè)面參數(shù)丟失的詳細(xì)內(nèi)容,更多關(guān)于vue的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- vue?router進(jìn)行路由跳轉(zhuǎn)并攜帶參數(shù)的實(shí)例詳解(params/query)
- Vue中$router.push()路由切換及如何傳參和獲取參數(shù)
- vue-router路由傳參及隱藏參數(shù)問(wèn)題
- vue-router如何實(shí)時(shí)動(dòng)態(tài)替換路由參數(shù)(地址欄參數(shù))
- Vue3使用vue-router如何實(shí)現(xiàn)路由跳轉(zhuǎn)與參數(shù)獲取
- vue router動(dòng)態(tài)路由設(shè)置參數(shù)可選問(wèn)題
- vue-router路由參數(shù)刷新消失的問(wèn)題解決方法
- 詳解vue-router2.0動(dòng)態(tài)路由獲取參數(shù)
- Vue Router中獲取路由傳遞過(guò)來(lái)的參數(shù)(方法詳解)
相關(guān)文章
Vue+Express實(shí)現(xiàn)登錄狀態(tài)權(quán)限驗(yàn)證的示例代碼
這篇文章主要介紹了Vue+Express實(shí)現(xiàn)登錄狀態(tài)權(quán)限驗(yàn)證的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05
vue實(shí)現(xiàn)簡(jiǎn)易音樂(lè)播放器
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)簡(jiǎn)易音樂(lè)播放器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
vue項(xiàng)目如何設(shè)置全局字體樣式font-family
這篇文章主要介紹了vue項(xiàng)目如何設(shè)置全局字體樣式font-family問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
vue項(xiàng)目配置sass及引入外部scss文件方式
這篇文章主要介紹了vue項(xiàng)目配置sass及引入外部scss文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04
vue中實(shí)現(xiàn)點(diǎn)擊空白區(qū)域關(guān)閉彈窗的兩種方法
這篇文章主要介紹了vue中實(shí)現(xiàn)點(diǎn)擊空白區(qū)域關(guān)閉彈窗的兩種方法,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下2020-12-12
ant design vue datepicker日期選擇器中文化操作
這篇文章主要介紹了ant design vue datepicker日期選擇器中文化操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10
VScode中配置ESlint+Prettier詳細(xì)步驟(附圖文介紹)
這篇文章主要介紹了VScode中配置ESlint+Prettier詳細(xì)步驟,文中通過(guò)代碼示例講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-12-12
Vue3非遞歸渲染Tree組件的初步實(shí)現(xiàn)代碼
這篇文章主要介紹了Vue3非遞歸渲染Tree組件的初步實(shí)現(xiàn),文中通過(guò)代碼示例講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定幫助,需要的朋友可以參考下2024-05-05

