在頁面跳轉中,我通過路由傳參,結果發現頁面參數丟失了。路徑返回了根目錄。。。。
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
