欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何處理vue router 路由傳參刷新頁面參數(shù)丟失

 更新時間:2021年05月12日 09:35:34   作者:sugar_coffee  
這篇文章主要介紹了如何處理vue router 路由傳參刷新頁面參數(shù)丟失,對vue感興趣的同學(xué),可以參考下

概述

常見場景:點擊列表的詳情,跳轉(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)文章!

相關(guān)文章

  • 一文詳解Vue中過濾器filters的使用

    一文詳解Vue中過濾器filters的使用

    Vue.js允許自定義過濾器,過濾器的作用可被用于一些常見的文本格式化(也就是修飾文本,但是文本內(nèi)容不會改變),本文主要來和大家講講過濾器filters的使用,感興趣的可以了解一下
    2023-04-04
  • ejsExcel模板在Vue.js項目中的實際運用

    ejsExcel模板在Vue.js項目中的實際運用

    這篇文章主要介紹了ejsExcel模板在Vue.js項目中的實際運用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • vue.js單頁面應(yīng)用實例的簡單實現(xiàn)

    vue.js單頁面應(yīng)用實例的簡單實現(xiàn)

    本篇文章主要介紹了vue.js單頁面應(yīng)用實例的簡單實現(xiàn),使用單頁應(yīng)用,沒有頁面切換,就沒有白屏阻塞,可以大大提高 H5 的性能,達(dá)到接近原生的流暢體驗。
    2017-04-04
  • vue3一個元素如何綁定兩個或多個事件

    vue3一個元素如何綁定兩個或多個事件

    這篇文章主要介紹了vue3一個元素如何綁定兩個或多個事件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Vue v-model實現(xiàn)案例介紹

    Vue v-model實現(xiàn)案例介紹

    v-model就是vue的雙向綁定的指令,能將頁面上控件輸入的值同步更新到相關(guān)綁定的data屬性,也會在更新data綁定屬性時候,更新頁面上輸入控件的值
    2022-09-09
  • vue?watch監(jiān)聽方法總結(jié)

    vue?watch監(jiān)聽方法總結(jié)

    這篇文章主要給大家分享的是vue?watch監(jiān)聽方法總結(jié),偵聽器一般來說是用來監(jiān)聽數(shù)據(jù)的變化,默認(rèn)是在數(shù)據(jù)發(fā)生變化時執(zhí)行。監(jiān)聽的數(shù)據(jù)名放到這里面作為函數(shù)名,這個函數(shù)里面有兩個參數(shù),一個是新值,一個是舊值。下面我們就一起進(jìn)入文章了解更具體的內(nèi)容吧
    2021-12-12
  • Element Timeline時間線的實現(xiàn)

    Element Timeline時間線的實現(xiàn)

    本文主要介紹了Element Timeline時間線的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • vue3?element?plus按需引入最優(yōu)雅的用法實例

    vue3?element?plus按需引入最優(yōu)雅的用法實例

    這篇文章主要給大家介紹了關(guān)于vue3?element?plus按需引入最優(yōu)雅的用法,以及關(guān)于Element-plus按需引入的一些坑,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • vue3動態(tài)路由+菜單欄的實現(xiàn)示例

    vue3動態(tài)路由+菜單欄的實現(xiàn)示例

    在后臺管理系統(tǒng),可以根據(jù)登錄用戶的不同返回不同路由,頁面也會根據(jù)這些路由生成對應(yīng)的菜單,本文主要介紹了vue3動態(tài)路由+菜單欄的實現(xiàn)示例,感興趣的可以了解一下
    2024-04-04
  • vuex中使用對象展開運算符的示例

    vuex中使用對象展開運算符的示例

    本篇文章主要介紹了vuex中使用對象展開運算符的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09

最新評論