电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

詳解Vue 路由組件傳參的 8 種方式

瀏覽:38日期:2022-10-02 15:12:34

我們在開發(fā)單頁面應(yīng)用時,有時需要進(jìn)入某個路由后基于參數(shù)從服務(wù)器獲取數(shù)據(jù),那么我們首先要獲取路由傳遞過來的參數(shù),從而完成服務(wù)器請求,所以,我們需要了解路由傳參的幾種方式,以下方式同 vue-router@4 。

編程式路由傳參

除了使用 <router-link> 創(chuàng)建 a 標(biāo)簽來定義導(dǎo)航鏈接,我們還可以借助 router 的實例方法,通過編寫代碼來實現(xiàn)。

1. 通過 params 傳遞

路由配置

路徑參數(shù) 用冒號 : 表示。

const routes = [ // 動態(tài)段以冒號開始 { path: ’details/:id’, name: 'details', component: Details },]

router.push() 方法的參數(shù)可以是一個字符串路徑,或者一個描述地址的對象。

const Home = { template: ’<div @click='toDetails'>To Details</div>’, metheds: { toDetails() { // 字符串路徑 this.$router.push(’/details/001’) // 帶有路徑的對象 this.$router.push({path: ’/details/001’}) // 命名路由,路由配置時,需要 name 字段 this.$router.push({ name: ’details’, params: { id: ’001’ } }) } }}

注意,如果提供了 path , params 會被忽略:

// `params` 不能與 `path` 一起使用router.push({ path: ’/details’, params: { id: ’001’ } }) // -> /details

組件獲取數(shù)據(jù)

當(dāng)一個路由被匹配時,它的 params 的值將在每個組件中以 this.$route.params 的形式暴露出來。

const Details = { template: ’<div>Details {{ $route.params.id }} </div>’, created() { // 監(jiān)聽路由變化 this.$watch( () => this.$route.params, (toParams, previousParams) => { // 對路由變化做出響應(yīng)... } ) },}2. 通過 query 傳遞

這種情況下 query (查詢參數(shù))傳遞的參數(shù)會顯示在 url 后面,如: /details/001?kind=car 。

路由配置

使用 query 時,以下三種方式都是可行的:

this.$router.push(’/details/001?kind=car’)this.$router.push({ path: ’/details/001’, query: { kind: 'car' }})this.$router.push({ name: ’details’, params: { id: ’001’ }, query: { kind: ’car’ }})組件獲取數(shù)據(jù)

組件通過 $route.query 獲取:

const Details = { template: ’<div>Details {{ $route.query.kind }} </div>’, created() { // 監(jiān)聽路由變化 this.$watch( () => this.$route.query, (toParams, previousParams) => { // 對路由變化做出響應(yīng)... } ) },}

要對同一個組件中參數(shù)的變化做出響應(yīng)的話,你可以簡單地 watch $route 對象上的任意屬性,在這個場景中,就是 $route.query 。

3. 通過 hash 傳遞

通過此方式,url 路徑中帶有 hash ,例如: /details/001#car 。

路由配置

使用 hash 時,以下三種方式都是可行的(同 query ):

this.$router.push(’/details/001#car’)this.$router.push({ path: ’/details/001’, hash: ’#car’})this.$router.push({ name: ’details’, params: { id: ’001’ }, hash: ’car’})組件獲取數(shù)據(jù)

組件通過 $route.hash.slice(1) 獲取:

const Details = { template: ’<div>Details {{ $route.hash.slice(1) }} </div>’,}通過 props 進(jìn)行傳遞

在組件中使用 $route 會與路由緊密耦合,這限制了組件的靈活性,因為它只能用于特定的 URL。雖然這不一定是件壞事,但我們可以通過 props 配置來解除這種行為。

以解耦的方式使用 props 進(jìn)行參數(shù)傳遞,主要是在路由配置中進(jìn)行操作。

1. 布爾模式

當(dāng) props 設(shè)置為 true 時, route.params 將被設(shè)置為組件的 props。

例如下面的代碼是通過 $route 的方式獲取動態(tài)字段 id :

const User = { template: ’<div>User {{ $route.params.id }}</div>’}const routes = [{ path: ’/user/:id’, component: User }]

將上面的代碼替換成 props 的形式,如下:

const User = { props: [’id’], // 組件中通過 props 獲取 id template: ’<div>User {{ id }}</div>’}// 路由配置中,增加 props 字段,并將值 設(shè)置為 trueconst routes = [{ path: ’/user/:id’, component: User, props: true }]

注意:對于有命名視圖的路由,你必須為每個命名視圖定義 props 配置:

const routes = [ { path: ’/user/:id’, components: { default: User, sidebar: Sidebar }, // 為 User 提供 props props: { default: true, sidebar: false } }]

2. 對象模式

當(dāng) props 是一個對象時,它將原樣設(shè)置為組件 props。當(dāng) props 是靜態(tài)的時候很有用。

路由配置

const routes = [ { path: ’/hello’, component: Hello, props: { name: ’World’ } }]

組件中獲取數(shù)據(jù)

const Hello = { props: { name: { type: String, default: ’Vue’ } }, template: ’<div> Hello {{ name }}</div>’}

<Hello /> 組件默認(rèn)顯示 Hello Vue,但路由配置了 props 對象,當(dāng)路由跳轉(zhuǎn)到 /hello 時,會顯示傳遞過來的 name , 頁面會顯示為 Hello World。

3. 函數(shù)模式

可以創(chuàng)建一個返回 props 的函數(shù)。這允許你將參數(shù)轉(zhuǎn)換為其他類型,將靜態(tài)值與基于路由的值相結(jié)合等等。

路由配置

使用函數(shù)模式時,返回 props 的函數(shù)接受的參數(shù)為路由記錄 route 。

// 創(chuàng)建一個返回 props 的函數(shù)const dynamicPropsFn = (route) => { return { name: route.query.say + '!' }}const routes = [ { path: ’/hello’, component: Hello, props: dynamicPropsFn }]組件獲取數(shù)據(jù)

當(dāng) URL 為 /hello?say=World 時, 將傳遞 {name: ’World!’} 作為 props 傳給 Hello 組件。

const Hello = { props: { name: { type: String, default: ’Vue’ } }, template: ’<div> Hello {{ name }}</div>’}

此時頁面將渲染:

詳解Vue 路由組件傳參的 8 種方式

注意:請盡可能保持 props 函數(shù)為無狀態(tài)的,因為它只會在路由發(fā)生變化時起作用。如果你需要狀態(tài)來定義 props,請使用包裝組件,這樣 vue 才可以對狀態(tài)變化做出反應(yīng)。

其他方式

1. 通過 Vuex 進(jìn)行傳遞

1. store 存儲狀態(tài); 2. A 組件更改 store 中的狀態(tài); 3. B 組件從 store 中獲取。

2. 通過前端本地存儲等方式

1. Local Storage; 2. Session Storage; 3. IndexedDB; 4. Web SQL; 5. Cookies。

到此這篇關(guān)于Vue 路由組件傳參的 8 種方式的文章就介紹到這了,更多相關(guān)Vue 路由組件傳參內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Vue
相關(guān)文章:
主站蜘蛛池模板: 无线遥控更衣吊篮_IC卡更衣吊篮_电动更衣吊篮配件_煤矿更衣吊篮-力得电子 | 继电器模组-IO端子台-plc连接线-省配线模组厂家-世麦德 | 阻垢剂-反渗透缓蚀阻垢剂厂家-山东鲁东环保科技有限公司 | 迪威娱乐|迪威娱乐客服|18183620002| 二氧化碳/活性炭投加系统,次氯酸钠发生器,紫外线消毒设备|广州新奥 | 手持式3d激光扫描仪-便携式三维立体扫描仪-北京福禄克斯 | 山楂片_雪花_迷你山楂片_山楂条饼厂家-青州市丰源食品厂 | HV全空气系统_杭州暖通公司—杭州斯培尔冷暖设备有限公司 | 郑州爱婴幼师学校_专业幼师培训_托育师培训_幼儿教育培训学校 | 压装机-卧式轴承轮轴数控伺服压装机厂家[铭泽机械] | 广东西屋电气有限公司-广东西屋电气有限公司 | 植筋胶-粘钢胶-碳纤维布-碳纤维板-环氧砂浆-加固材料生产厂家-上海巧力建筑科技有限公司 | 播音主持培训-中影人教育播音主持学苑「官网」-中国艺考界的贵族学校 | 小型数控车床-数控车床厂家-双头数控车床 | 学生作文网_中小学生作文大全与写作指导 | 100_150_200_250_300_350_400公斤压力空气压缩机-舰艇航天配套厂家 | 智慧食堂_食堂管理系统_食堂订餐_食堂消费系统—客易捷 | 不锈钢丸厂家,铝丸,铸钢丸-淄博智源铸造材料有限公司 | 医院专用门厂家报价-医用病房门尺寸大全-抗菌木门品牌推荐 | 平面钻,法兰钻,三维钻-山东兴田阳光智能装备股份有限公司 | 厂房出售_厂房仓库出租_写字楼招租_土地出售-中苣招商网-中苣招商网 | 广州小程序开发_APP开发公司_分销商城系统定制_小跑科技 | 华夏医界网_民营医疗产业信息平台_民营医院营销管理培训 | 吉林污水处理公司,长春工业污水处理设备,净水设备-长春易洁环保科技有限公司 | 板框压滤机-隔膜压滤机配件生产厂家-陕西华星佳洋装备制造有限公司 | 红立方品牌应急包/急救包加盟,小成本好项目代理_应急/消防/户外用品加盟_应急好项目加盟_新奇特项目招商 - 中红方宁(北京) 供应链有限公司 | 车充外壳,车载充电器外壳,车载点烟器外壳,点烟器连接头,旅行充充电器外壳,手机充电器外壳,深圳市华科达塑胶五金有限公司 | 冷却塔减速机器_冷却塔皮带箱维修厂家_凉水塔风机电机更换-广东康明冷却塔厂家 | 广东恩亿梯电源有限公司【官网】_UPS不间断电源|EPS应急电源|模块化机房|电动汽车充电桩_UPS电源厂家(恩亿梯UPS电源,UPS不间断电源,不间断电源UPS) | 贴片电感_贴片功率电感_贴片绕线电感_深圳市百斯特电子有限公司 贴片电容代理-三星电容-村田电容-风华电容-国巨电容-深圳市昂洋科技有限公司 | 亮化工程,亮化设计,城市亮化工程,亮化资质合作,长沙亮化照明,杰奥思【官网】 | ETFE膜结构_PTFE膜结构_空间钢结构_膜结构_张拉膜_浙江萬豪空间结构集团有限公司 | 登车桥动力单元-非标液压泵站-非标液压系统-深圳市三好科技有限公司 | 商标转让-购买商标专业|放心的商标交易网-蜀易标商标网 | 菏泽商标注册_菏泽版权登记_商标申请代理_菏泽商标注册去哪里 | 成都软件开发_OA|ERP|CRM|管理系统定制开发_成都码邻蜀科技 | 杭州画室_十大画室_白墙画室_杭州美术培训_国美附中培训_附中考前培训_升学率高的画室_美术中考集训美术高考集训基地 | 聚丙烯酰胺PAM-聚合氯化铝PAC-絮凝剂-河南博旭环保科技有限公司 巨野电机维修-水泵维修-巨野县飞宇机电维修有限公司 | 深圳公司注册-工商注册代理-注册公司流程和费用_护航财税 | 金现代信息产业股份有限公司--数字化解决方案供应商 | 多功能干燥机,过滤洗涤干燥三合一设备-无锡市张华医药设备有限公司 |