vue-router 路由跳轉傳參刷新頁面后參數丟失問題


常見場景:點擊列表詳情,跳轉到詳情內頁,傳遞id參數獲取詳情數據。

我們先來看看路由跳轉的幾種方式:

1、通過params方式傳參

通過$route.push的path攜帶參數方式(路由配置中指定參數)

// 路由配置
{ 
   path: '/detail/:id',  //若id后面加?代表這個參數是可選的,即使不傳id也不會導致頁面無法訪問
   name: 'detail', 
   component: Detail 
}

// 列表中跳轉
this.$router.push({
   path:`/detail/${id}` 
})

// 詳情頁獲取參數
this.$route.params.id

注意:這種方式參數是以/id跟在url后,刷新頁面后參數不會丟失。

通過$route.push的params傳參(路由配置中未指定參數)

// 列表中跳轉
this.$router.push({
   name:'detail',
   params:{
       id:id     
   }
})

// 詳情頁獲取參數
this.$route.params.id

注意:這種方式的傳參,必須使用name進行跳轉,未在路由配置:id,url后不會顯示id,刷新頁面后參數會丟失。

2、通過query方式傳參

// 路由配置
{ 
    path: '/detail',
    name: 'detail', 
    component: Detail 
}

// 列表中跳轉
this.$router.push({
   path:'/detail',
   query:{
       id:id
   }
})

// 詳情頁獲取參數
this.$route.query.id

注意:這種方式的參數以?id跟在url后,類似get傳參,並且,query必須使用path進行傳參。刷新頁面后參數不會丟失。

傳遞的參數是對象或數組

還有一種情況就是,如果通過query方式傳遞的是對象或數組,在地址欄中會被強制轉換成[object Object],刷新后頁獲取不到對象值。

那么我們可以通過JSON.stringify()方法將參數轉換為字符串,在獲取參數時通過JSON.parse轉換成對象。

let parObj = JSON.stringify(obj)
// 路由跳轉
this.$router.push({
   path:'/detail',
   query:{
       obj:parObj
   }
})

// 詳情頁獲取參數
JSON.parse(this.$route.query.obj)

注意:這樣雖然可以傳對象,但是如果數據多的話地址欄會很長(不太推薦)。

3、使用props配合組件路由解耦

路由配置中指定參數:id

// 路由配置
{
   path:'/detail/:id',
   name:'detail',
   component:Detail,
   props:true             // 如果props設置為true,$route.params將被設置為組件屬性  
}

// 路由跳轉
this.$router.push({
   path:`/detail/${id}`
})

// 詳情頁獲取參數
export default {
  props:['id'],      // 將路由中傳遞的參數id解耦到組件的props屬性上
  mounted(){
    console.log("id",this.id);  
  }
}

路由配置中未指定參數:id

// 路由配置
{
   path:'/detail',
   name:'detail',
   component:Detail,
   props:true             // 如果props設置為true,$route.params將被設置為組件屬性  
}

// 路由跳轉
this.$router.push({
   name:'detail',
   params:{
       order:{
         id:'123456789',
         name:'商品名稱'  
       }
   }
})

// 詳情頁獲取參數
export default {
  props:['order'],      // 將路由中傳遞的參數order解耦到組件的props屬性上
  mounted(){
    console.log("order",this.order);  
  }
}

注意:路由配置中指定參數:id的,頁面刷新后參數不會丟失,在路由配置未指定參數的,使用params跳轉傳參頁面刷新后參數會丟失

此外,數據量比較大的參數,可以使用sessionStorage或localStorage來進行存儲參數來解決頁面刷新參數丟失的問題,具體結合實際項目即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM