<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
關於路由傳參的幾種方式,眾說紛紜。今天來總結下路由傳參的幾種方式與路由解耦:
路由傳參總的來說有兩種方式,query和params,配合宣告式導航與程式設計式導航,各有不同的幾種寫法;
//路由設定 { path: '/a01', name: 'a01', component: a01 }
//傳參方式1--通過url拼接,使用?分割 <router-link to="/a01?data=a01">a01</router-link> //傳參方式2--傳入物件 <router-link :to="{ path: '/a01', query: { data: 'a01' } }">a02</router-link>
路由設定方式不變;
//繫結事件 <span @click="btn('/a01', 'a01')">b01</span> //處理路由方式1,通過path配合query btn(path, data) { this.$router.push({ path, query: { data, }, }); }, //處理路由方式2,通過name配合query btn1(name, data) { this.$router.push({ name, query: { data, }, }); },
1.引數在url中展現,使用?分割。屬性和值以鍵值對形式存在
2.子元件通過$route.query.xxx方式獲取引數(xxx為自己定義的引數名)
params傳參分為兩種情況,路徑佔位與不佔位
params配合宣告式導航:
//路由宣告需要使用‘:'佔位 { path: '/a02/:data', name: 'a02', component: a02 }
//傳參方式1--url拼接,不需要?分割 <router-link to="/a02/a02">a02</router-link> //傳參方式2--傳物件 <router-link :to="{ path: '/a02/a02' }">a02.1</router-link>
params配合程式設計式導航:
btn1(name, data) { this.$router.push({ name, params: { data, }, }); },
params傳參配合路徑佔位的特點:
1.引數在url中展現,沒有?=等額外標籤
2.子元件以$route.params.xxx方式獲取引數(xxx為自己定義的引數名)
宣告式導航
<router-link :to="{ name:'a02',params:{data:'a02'} }">a02.1</router-link>
注意!!需要使用name,不可以使用path,官網解釋如下:
注意:如果提供了 path,params 會被忽略,你需要提供路由的 name 或手寫完整的帶有引數的 path
程式設計式導航
//路由設定 { path: '/a03', name: 'a03', component: a03 } //路由跳轉 <span @click="btn3('a03', 'a03')">b04</span> btn3(name, data) { this.$router.push({ name, params: { data, }, }); },
params傳參佔位的特點:
1.引數在不在url體現
2.重新整理後資料丟失
vue的元件是可以複用的,但是路由給子元件傳值後,通過$route獲取引數會導致子元件無法複用,解決這個問題,需要用到props解耦;
具體使用:
1.在路由設定時使用props
{ path: '/a02/:data', name: 'a02', component: a02, //使用props傳參 props: true }
2.父元件傳參,沒有變化
3.子元件使用props接收
<template> <p>{{ data }}</p> </template> <script> export default { props: { data: { type: String, }, }, }; </script>
props為布林值 true 開啟props接收,false關閉。
上例我們演示的就是這樣的情況,但是,props為布林值時,只適用於params傳參,對query不適用;
props設定為函數,可以獲取query方式的傳值,通過route.query.xxx方式
//設定 { path: '/a01', name: 'a01', component: a01, props: (route) => ({ data: route.query.data }) } //傳參--與query一致 <router-link to="/a01?data=a01">a01</router-link> //接收 <template> <p>{{ data }}</p> </template> <script> export default { props: { data: { type: String, }, }, }; </script>
props物件模式直接傳遞固定值,不需要再傳參;
//設定 { path: '/a01', name: 'a01', component: a01, props: {data:'123'} }
以上,為本次分享全部內容,如有錯誤,歡迎隨時私信指正,不勝感激。
到此這篇關於Vue路由傳參及props解耦深入分析的文章就介紹到這了,更多相關Vue路由傳參內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45