如何處理vue router 路由傳參刷新頁面參數(shù)丟失
概述
常見場景:點擊列表的詳情,跳轉(zhuǎn)到詳情內(nèi)頁,在內(nèi)頁根據(jù)傳遞的參數(shù)獲取詳情數(shù)據(jù)。
路由傳參一般有如下幾種方式,下面主要介編程式導(dǎo)航 router.push 的傳參方式:
方法一:通過 params 傳參
路由配置如下:
{ path: '/detail/:id', //若id后面加?代表這個參數(shù)是可選的 name: 'detail', component: Detail }
通過 $router.push 中 path 攜帶參數(shù)的方式
// 列表中的傳參 goDetail(row) { this.$router.push({ path: `/detail/${row.id}` }) } // 詳情頁獲取參數(shù) this.$route.params.id
通過 $router.push 的 params 傳參
// 列表頁傳參 goDetail(row) { this.$router.push({ name: 'detail', params: { id: row.id } }) } // 詳情頁獲取 this.$route.params.id
注:這種方式的傳參,路徑用 name,路徑用 name,路徑用 name , 用 path 會獲取不到;如果在路由配置中沒有添加 /:id即 path: 'detail',url 中不會顯示 id,在詳情頁還是可以拿到參數(shù) id,但刷新后參數(shù)丟失。
以上這兩種方式,傳遞的參數(shù) id 會在 url 后面顯示,如圖:
傳遞的參數(shù)會暴露在網(wǎng)址中。
如果在路由中設(shè)置了params參數(shù) /:id,但是在跳轉(zhuǎn)的時候沒有傳遞參數(shù),會導(dǎo)致頁面沒有內(nèi)容或跳轉(zhuǎn)失敗,可在后面加 ?代表這個參數(shù)是可選的,即 /:id?
方法二:通過 query 傳參
// 路由配置 { path: '/detail', name: 'detail', component: Detail } // 列表頁 goDetail(row) { this.$router.push({ path: '/detail', query: { id: row.id } }) } // 詳情頁 this.$route.query.id
注:這種方式傳遞的參數(shù)會在地址欄的 url 后面顯示 ?id=?,類似于 get 傳參;query 必須配合 path 來傳參。
傳遞的參數(shù)是對象或數(shù)組
還有一種情況就是,如果通過 query 的方式傳遞對象或數(shù)組,在地址欄中會被強制轉(zhuǎn)換成 [object Object],刷新后也獲取不到對象值。
此時可以通過 JSON.stringify() 方法將要傳遞的參數(shù)轉(zhuǎn)換為字符串傳遞,在詳情頁再通過 JSON.parse() 轉(zhuǎn)換成對象。
let parObj = JSON.stringify(obj) this.$router.push({ path: '/detail', query: { 'obj': parObj } }) // 詳情頁 JSON.parse(this.$route.query.obj)
這個方法雖然可以傳遞對象,若數(shù)據(jù)少還好,數(shù)據(jù)多的話地址欄就很長了
注意:在所有的子組件中獲取路由參數(shù)是 $route不是 $router
以上 params 和 query 傳參方式對比:
- 通過 $router.push 的 params + name 傳參,若路由中沒有設(shè)置params參數(shù),參數(shù)不會拼接在路由后面,但是頁面刷新參數(shù)會丟失。
- 通過 $router.push 中 path 攜帶參數(shù)或通過 query 傳參,參數(shù)會拼接在地址后面,會暴露信息。
方法三:使用 props 配合組件路由解耦
// 路由配置 { path: '/detail/:id', name: 'detail', component: Detail, props: true // 如果props設(shè)置為true,$route.params將被設(shè)置為組件屬性 } // 列表頁 goDetail(row) { this.$router.push({ path: '/detail', query: { id: row.id } }) } // 詳情頁 export default { props: { // 將路由中傳遞的參數(shù)id解耦到組件的props屬性上 id: String }, mounted: { console.log(this.id) } }
此外,還可以通過把參數(shù)存在 sessionStorage 或 localStorage 中來解決頁面刷新參數(shù)丟失的問題,具體結(jié)合實際項目即可。
以上就是如何處理vue router 路由傳參刷新頁面參數(shù)丟失的詳細(xì)內(nèi)容,更多關(guān)于vue的資料請關(guān)注腳本之家其它相關(guān)文章!
- vue?router進(jìn)行路由跳轉(zhuǎn)并攜帶參數(shù)的實例詳解(params/query)
- Vue中$router.push()路由切換及如何傳參和獲取參數(shù)
- vue-router路由傳參及隱藏參數(shù)問題
- vue-router如何實時動態(tài)替換路由參數(shù)(地址欄參數(shù))
- Vue3使用vue-router如何實現(xiàn)路由跳轉(zhuǎn)與參數(shù)獲取
- vue router動態(tài)路由設(shè)置參數(shù)可選問題
- vue-router路由參數(shù)刷新消失的問題解決方法
- 詳解vue-router2.0動態(tài)路由獲取參數(shù)
- Vue Router中獲取路由傳遞過來的參數(shù)(方法詳解)
相關(guān)文章
vue.js單頁面應(yīng)用實例的簡單實現(xiàn)
本篇文章主要介紹了vue.js單頁面應(yīng)用實例的簡單實現(xiàn),使用單頁應(yīng)用,沒有頁面切換,就沒有白屏阻塞,可以大大提高 H5 的性能,達(dá)到接近原生的流暢體驗。2017-04-04vue3?element?plus按需引入最優(yōu)雅的用法實例
這篇文章主要給大家介紹了關(guān)于vue3?element?plus按需引入最優(yōu)雅的用法,以及關(guān)于Element-plus按需引入的一些坑,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03