vue 路由傳參中刷新頁面參數丟失 及傳參的幾種方式?


在頁面跳轉中,我通過路由傳參,結果發現頁面參數丟失了。路徑返回了根目錄。。。。

1. 先說下路由傳參的幾種方式吧?

比如:<div v-for="item in items" @click="get(item.id)">

傳參方式1:

         1) get:function(id){                      
                        this.$router.push({
                               path: `/describe/${id}`,
                        })
                }


        2) 相應路由配置:{
                                     path: '/describe/:id',
                                     name: 'Describe',
                                     component: Describe
                                   }

         3) 子組件取 this.$route.params.id ;

傳參方式2:

          1)父組件通過name來匹配
                this.$router.push({
                      name: 'Describe',
                      params: {
                                   id: id
                      }
             })

         2)相應路由配置:
                 {
                      path: '/describe/:id',
                      name: 'Describe',
                      component: Describe
                  }
         3)子組件是通過:
                 this.$route.params.id

注意:此方式2有一個小坑,以前用params 時感覺很方便,就用了方式2。

      坑一:子組件第一次沒有獲取到值,原來我是用path路徑,而沒有用name。我把它改掉了。
      坑二:改掉后發現刷新參數不見了。。。。。。。。。。。根據網上大神的建議,再路由配置中加了path: '/describe/:id',  相當於混合了第一種方式; 但是。。。。。。。。
      坑三:由於根路徑是登陸頁,每次返回,並不是返回上一頁,而是直接返回了根路徑登陸頁(我在路由配置中加了好多參數,導致describe丟失),這就有點煩了,本來你把主頁設為 /也可以,但是並不是我一開始想要的結果,

  哈哈。。。方案三解決了上述所有的問題;

傳參方式3:

     父組件:this.$router.push({
                        path: '/describe',
                        query: {
                                      id: id
                        }
                    })

    路由設置:
                    {
                         path: '/describe',
                         name: 'Describe',
                         component: Describe
                     }

     子組件獲取:
                   
             this. $route.query.id

注意所有的子組件獲取是$route,而不是$router ,哈哈,很開心完美解決了路由傳參


免責聲明!

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



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