vue路由三種傳參方式詳細(xì)講解
一、params傳參
1.1 顯示參數(shù)(動態(tài)路由匹配)
很多時(shí)候,我們需要將給定匹配模式的路由映射到同一個組件。例如,我們可能有一個 Search組件,它應(yīng)該對所有用戶進(jìn)行渲染,但查找的關(guān)鍵字不同。在 Vue Router 中,我們可以在路徑中使用一個動態(tài)字段來實(shí)現(xiàn),我們稱之為路徑參數(shù) 。
(1)在開始傳參前,需要子路由提前配置好參數(shù)。比如:keyword
。
ps:
- url中的參數(shù)需要用冒號 : 表示。當(dāng)一個路由被匹配時(shí),它的 params 的值將在每個組件中以 this.$route.params 的形式暴露出來。
- 因?yàn)閰?shù)在url路徑上顯示,所以當(dāng)我們刷新時(shí),參數(shù)依舊保留
//子組件 { path: '/Search/:keyword', name: 'Search', component: () => import ('../views/Search'), meta: { show: true } }
(2)傳參分為聲明式傳參和編程式傳參
聲明式傳參:該方式是通過 router-link
組件的to
屬性實(shí)現(xiàn),該方法的參數(shù)可以是一個字符串路徑,或者一個描述地址的對象。
//父路由組件 <router-link :to="/Search/123">進(jìn)入搜索頁面</router-link>
編程式傳參:該方式是通過 this.$router.push
屬性實(shí)現(xiàn)。
(a)字符串的形式傳參
//父路由編程式傳參(一般通過事件觸發(fā)) this.$router.push({ path:'/Search/${keyword}', })
(b)對象形式傳參(路由必須要有別名name
)
//父路由編程式傳參 this.$router.push({ name: "Search", params: { keyword: this.keyword },//這種方式的傳參必須要有路由的別名name });
注意項(xiàng):
(1)params
傳參如何做到可傳可不傳?在子組件的參數(shù)路徑后面加上?
,采用正則表達(dá)式
{ path: '/Search/:keyword?', name: 'Search', component: () => import ('../views/Search'), meta: { show: true } }
(2)params
傳參如何傳空字符?
在父組件傳參的時(shí)候,給參數(shù)加上判斷。如果是空字符,則傳入undefined
this.$router.push({ name: "Search", params: { keyword: this.keyword || undefined }, });
1.2 不顯示參數(shù)
注意:當(dāng)params
不在路由上時(shí),參數(shù)為不可見。但是當(dāng)我們刷新頁面是,參數(shù)會消失。
params
傳參(不顯示參數(shù))也可分為 聲明式 和 編程式 兩種方式,與前面不同的是,這里是通過路由的別名 name 進(jìn)行傳值的,并且子路由不需要配置參數(shù)。
聲明式傳參:該方式是通過 router-link
組件的to
屬性實(shí)現(xiàn),比如:
//父路由組件 <router-link :to="{name:'Search',params:{keyword:123}}">進(jìn)入搜索頁面</router-link>
編程式傳參:該方式是通過 this.$router.push
屬性對象方式實(shí)現(xiàn)。
//父路由編程式傳參 this.$router.push({ name: "Search", params: { keyword: this.keyword },//這種方式的傳參必須要有路由的別名name });
1.3 獲取傳參
在子路由中可以通過下面代碼來獲取傳遞的參數(shù)值
this.$route.params.keyword
二、query傳參(顯示傳參)
2.1 傳參
**注意:query
傳參在路徑上以?關(guān)鍵字=
**的形式存在,刷新頁面,數(shù)據(jù)保留
聲明式傳參:該方式是通過 router-link
組件的to
屬性實(shí)現(xiàn),需要子路由提前配置好路由別名(name
屬性)。比如:
//父路由組件 <router-link :to="{name:'Search',query:{keyword:123}}">進(jìn)入搜索頁面</router-link>
編程式傳參:
(1)該方式是通過 this.$router.push
屬性對象方式實(shí)現(xiàn)。
//父路由編程式傳參 this.$router.push({ name: "Search", query: { keyword: this.keyword },//這種方式的傳參必須要有路由的別名name });
(2)路徑傳參
this.$router.push(`/Search?k=${this.keyword}`);
2.2 獲取傳參
在子路由中可以通過下面代碼來獲取傳遞的參數(shù)值
this.$route.query.keyword
三、props傳參(路由組件傳參)
3.1、布爾模式
當(dāng)props
設(shè)置為true
時(shí),route.params
將被設(shè)置為組件的props
。這種情況下,只能傳params參數(shù)。
//子路由 { path: '/Search/:keyword?', name: 'Search', component: () => import ('../views/Search'), meta: { show: true }, props: true }
3.2、對象模式
當(dāng)props
是一個對象時(shí),它將原樣設(shè)置為組件props
。
{ path: '/Search/:keyword?', name: 'Search', component: () => import ('../views/Search'), meta: { show: true }, props: { a: 1, b: 2 } //定義a和b兩個變量 }
3.3、函數(shù)模式
你可以創(chuàng)建一個返回props
的函數(shù)。這允許你將參數(shù)轉(zhuǎn)換為其他類型,將靜態(tài)值與基于路由的值相結(jié)合等等。
{ path: '/Search/:keyword?', name: 'Search', component: () => import ('../views/Search'), meta: { show: true }, props: route => ({ k: route.query.keyword, keyword: route.params.keyword }) }
3.4、獲取參數(shù)
//首先在父路由里面設(shè)置路由跳轉(zhuǎn) this.$router.push({ name: "Search", params: { keyword: this.keyword || undefined }, query: { k: this.keyword.toUpperCase() }, }); //然后給子路由的路徑配置里面加上props { path: '/Search/:keyword?', name: 'Search', component: () => import ('../views/Search'), meta: { show: true }, props: route => ({ k: route.query.k, keyword: route.params.keyword }) }
最后我們可以在子頁面中通過props
獲取參數(shù)
結(jié)果如下:
總結(jié)
到此這篇關(guān)于vue路由三種傳參方式詳細(xì)講解的文章就介紹到這了,更多相關(guān)vue路由傳參內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決vue路由發(fā)生了跳轉(zhuǎn)但是界面沒有任何反應(yīng)問題
這篇文章主要介紹了解決vue路由發(fā)生了跳轉(zhuǎn)但是界面沒有任何反應(yīng)問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04Vue3中使用echarts的簡單七個步驟(易懂,附緊急避坑)
近期在做一個vue3的項(xiàng)目,里面有個圖表需求,因公司之前使用第三方封裝的圖表缺少文檔,就去看了echars的官網(wǎng)文檔,引入原生echars來實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于Vue3中使用echarts的簡單七個步驟,需要的朋友可以參考下2023-01-01Vue路由對象屬性 .meta $route.matched詳解
今天小編就為大家分享一篇Vue路由對象屬性 .meta $route.matched詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11vue 動態(tài)添加/刪除dom元素節(jié)點(diǎn)的操作代碼
這篇文章主要介紹了vue 動態(tài)添加/刪除dom元素,需要在點(diǎn)擊添加時(shí),增加一行key/value的輸入框;點(diǎn)擊垃圾桶圖標(biāo)時(shí),刪除對應(yīng)行,本文結(jié)合實(shí)例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下2022-12-12解決Vue + Echarts 使用markLine標(biāo)線(precision精度問題)
這篇文章主要介紹了解決Vue + Echarts 使用markLine標(biāo)線(precision精度問題),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07vue項(xiàng)目中jsonp跨域獲取qq音樂首頁推薦問題
這篇文章主要介紹了vue項(xiàng)目中jsonp跨域獲取qq音樂首頁推薦問題,非常不錯,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-05-05