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

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

Vue Router根據(jù)后臺數(shù)據(jù)加載不同的組件實現(xiàn)

瀏覽:3日期:2023-02-16 10:20:50
目錄實際項目中遇到的需求有一些不好的實現(xiàn)方式個人感覺比較好的實現(xiàn)方式功能已實現(xiàn),但我又開始了新的思考最終方案——高階組件實際項目中遇到的需求

同一個鏈接需要加載不同的頁面組件。根據(jù)用戶所購買服務(wù)的不同,有不同的頁面展現(xiàn)。

有一些不好的實現(xiàn)方式 直接把這幾個組件寫在同一個組件下,通過v-if去判斷。如果這么做的話,甚至可以不使用vue-router,直接把所有組件,都寫在一個文件里面,全部通過v-if判斷,也是可行的。(前提是幾萬行代碼一起,你不嫌麻煩的話) 在渲染這個鏈接的時候,直接去請求后臺的數(shù)據(jù),通過數(shù)據(jù)渲染不同的鏈接。(理論上是可行的,但如果用戶沒有用這個功能,這些鏈接每次都提前取了后臺數(shù)據(jù);另外如果用戶知道了鏈接,直接訪問鏈接,還是需要邏輯去判斷用戶該看到哪個頁面) 通過調(diào)用router.beforeEach,對每個路由進行攔截,當(dāng)路由為我們指定的路由時,請求后臺數(shù)據(jù),動態(tài)跳轉(zhuǎn)頁面。(功能是可以完成,但實際上,這只是整個系統(tǒng)的一小塊功能,不應(yīng)該侵入整個路由系統(tǒng),如果每個業(yè)務(wù)頁面,都寫在全局路由系統(tǒng),也會導(dǎo)致路由的邏輯過于復(fù)雜) 個人感覺比較好的實現(xiàn)方式

在配置路由的地方獲取服務(wù)器數(shù)據(jù)動態(tài)加載對應(yīng)的組件

{ path: ’shopKPI’, // 如果提前把后臺數(shù)據(jù)存到store里面,在這里訪問store數(shù)據(jù),可以直接判斷出來 // 但這種特定業(yè)務(wù)頁面的數(shù)據(jù)放全局store,其他地方也不用,實在沒有必要 component: () => import(’@/views/store/dataVersion’), name: ’store_KPI’, menuName: ’店鋪參謀’, meta: { codes: [’storeProduct.detail’] }}

理想很美好,現(xiàn)實的情況是,component接收的這個方法必須要同步的返回一個promise。

這時候我想到了上面不好的實現(xiàn)方式1,稍微加以改造

<!-- ChooseShopKPI.vue --><template> <dataVersion v-if='!useNewShopKPI' /> <ShopKPI v-else /></template><script>import { get } from ’lodash’;import { getStoreReportFormVersion } from ’@/api/store’;import dataVersion from ’./dataVersion’;import ShopKPI from ’./ShopKPI’;export default { name: ’ChooseShopKPI’, components: { dataVersion, ShopKPI, }, data() { return { useNewShopKPI: false }; }, created() { getStoreReportFormVersion().then((res) => { if (get(res, ’data.data.new’)) {this.useNewShopKPI = true; } }); },};</script><style lang='css' scoped></style>

把路由渲染對應(yīng)的頁面,改為渲染這個中間頁面ChooseShopKPI

{ path: ’shopKPI’, // 如果提前把后臺數(shù)據(jù)取到,在這里訪問store數(shù)據(jù),可以直接判斷出來 // 但這種特定業(yè)務(wù)頁面的數(shù)據(jù)放全局store,其他地方也不用,實在沒有必要- component: () => import(’@/views/store/dataVersion’),+ component: () => import(’@/views/store/ChooseShopKPI’), name: ’store_KPI’, menuName: ’店鋪參謀’, meta: { codes: [’storeProduct.detail’] }}

這樣就實現(xiàn)了我們期望的功能。

功能已實現(xiàn),但我又開始了新的思考

這種方式雖然很好的解決了動態(tài)加載頁面組件的問題。但也產(chǎn)生了一些小問題。

如果這種通過服務(wù)器加載數(shù)據(jù)的頁面后續(xù)增加的話,會出現(xiàn)多個ChooseXXX的中間頁面。 這種中間頁面,實際上是做了二次路由,不熟悉邏輯的開發(fā)人員可能并不清楚這里面的頁面跳轉(zhuǎn)邏輯,增加了理解成本。最終方案——高階組件

通過對ChooseXXX進行抽象,改造為DynamicLoadComponent

<!-- DynamicLoadComponent.vue --><template> <component :is='comp' /></template><script>export default { name: ’DynamicLoadComponent’, props: { renderComponent: { type: Promise, }, }, data() { return { comp: () => this.renderComponent } }, mounted() {},};</script><style lang='css' scoped></style>

直接在路由的配置中獲取后臺數(shù)據(jù),并進行路由的分發(fā)。這樣路由邏輯都集中在路由配置文件中,沒有二次路由。維護起來不會頭疼腦脹。

DynamicLoadComponent組件也得以復(fù)用,后續(xù)新增判斷后臺數(shù)據(jù)加載頁面的路由配置,都可以導(dǎo)向這個中間組件。

{ path: ’shopKPI’, component: () => import(’@/views/store/components/DynamicLoadComponent’), name: ’store_KPI’, menuName: ’店鋪參謀’, meta: { codes: [’storeProduct:detail’], }, props: (route) => ({ renderComponent: new Promise((resolve, reject) => { getStoreReportFormVersion().then((responseData) => { const useNewShopKPI = get(responseData, ’data.data.shop_do’); const useOldShopKPI = get( responseData, ’data.data.store_data_show’ ); if (useNewShopKPI) { resolve(import(’@/views/store/ShopKPI’)); } else if (useOldShopKPI) { resolve(import(’@/views/store/dataVersion’)); } else { resolve(import(’@/views/store/ShopKPI/NoKPIService’)); }}).catch(reject); }), })}

查看在線小例子(只支持chrome)https://stackblitz.com/edit/vuejs-starter-jsefwq?file=index.js

到此這篇關(guān)于Vue Router根據(jù)后臺數(shù)據(jù)加載不同的組件實現(xiàn)的文章就介紹到這了,更多相關(guān)Vue Router后臺數(shù)據(jù)加載不同的組件 內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Vue
相關(guān)文章:
主站蜘蛛池模板: 超声波成孔成槽质量检测仪-压浆机-桥梁预应力智能张拉设备-上海硕冠检测设备有限公司 | 中高频感应加热设备|高频淬火设备|超音频感应加热电源|不锈钢管光亮退火机|真空管烤消设备 - 郑州蓝硕工业炉设备有限公司 | 悬浮拼装地板_篮球场木地板翻新_运动木地板价格-上海越禾运动地板厂家 | 高尔夫球杆_高尔夫果岭_高尔夫用品-深圳市新高品体育用品有限公司 | 气动球阀_衬氟蝶阀_调节阀_电动截止阀_上海沃托阀门有限公司 | 齿轮减速马达一体式_蜗轮蜗杆减速机配电机-德国BOSERL齿轮减速电动机生产厂家 | 蓝莓施肥机,智能施肥机,自动施肥机,水肥一体化项目,水肥一体机厂家,小型施肥机,圣大节水,滴灌施工方案,山东圣大节水科技有限公司官网17864474793 | 广西资质代办_建筑资质代办_南宁资质代办理_新办、增项、升级-正明集团 | 电梯乘运质量测试仪_电梯安全评估测试仪-武汉懿之刻 | B2B网站_B2B免费发布信息网站_B2B企业贸易平台 - 企资网 | 电子天平-华志电子天平厂家| 硅PU球场、篮球场地面施工「水性、环保、弹性」硅PU材料生产厂家-广东中星体育公司 | 招商帮-一站式网络营销服务|搜索营销推广|信息流推广|短视视频营销推广|互联网整合营销|网络推广代运营|招商帮企业招商好帮手 | 济南电缆桥架|山东桥架-济南航丰实业有限公司| 火锅加盟_四川成都火锅店加盟_中国火锅连锁品牌十强_朝天门火锅【官网】 | 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 - 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 | 超声波电磁流量计-液位计-孔板流量计-料位计-江苏信仪自动化仪表有限公司 | LINK FASHION 童装·青少年装展 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | AGV无人叉车_激光叉车AGV_仓储AGV小车_AGV无人搬运车-南昌IKV机器人有限公司[官网] | 专业深孔加工_东莞深孔钻加工_东莞深孔钻_东莞深孔加工_模具深孔钻加工厂-东莞市超耀实业有限公司 | 陶氏道康宁消泡剂_瓦克消泡剂_蓝星_海明斯德谦_广百进口消泡剂 | 泰兴市热钻机械有限公司-热熔钻孔机-数控热熔钻-热熔钻孔攻牙一体机 | 儿童乐园|游乐场|淘气堡招商加盟|室内儿童游乐园配套设备|生产厂家|开心哈乐儿童乐园 | 我车网|我关心的汽车资讯_汽车图片_汽车生活! | 小区健身器材_户外健身器材_室外健身器材_公园健身路径-沧州浩然体育器材有限公司 | 金联宇电缆|广东金联宇电缆厂家_广东金联宇电缆实业有限公司 | 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | 南京精锋制刀有限公司-纵剪机刀片_滚剪机刀片_合金刀片厂家 | 泉州陶瓷pc砖_园林景观砖厂家_石英砖地铺石价格 _福建暴风石英砖 | 陕西安闸机-伸缩门-车牌识别-广告道闸——捷申达门业科技 | 网站优化公司_SEO优化_北京关键词百度快速排名-智恒博网络 | 黑龙江「京科脑康」医院-哈尔滨失眠医院_哈尔滨治疗抑郁症医院_哈尔滨精神心理医院 | 电竞学校_电子竞技培训学校学院-梦竞未来电竞学校官网 | 通辽信息港 - 免费发布房产、招聘、求职、二手、商铺等信息 www.tlxxg.net | 福州仿石漆加盟_福建仿石漆厂家-外墙仿石漆加盟推荐铁壁金钢(福建)新材料科技有限公司有保障 | 上海软件开发-上海软件公司-软件外包-企业软件定制开发公司-咏熠科技 | 柔性测斜仪_滑动测斜仪-广州杰芯科技有限公司 | 环氧铁红防锈漆_环氧漆_无溶剂环氧涂料_环氧防腐漆-华川涂料 | 楼承板-钢筋楼承板-闭口楼承板-无锡优贝斯楼承板厂 | 振动筛-交叉筛-螺旋筛-滚轴筛-正弦筛-方形摇摆筛「新乡振动筛厂家」 | 防腐储罐_塑料储罐_PE储罐厂家_淄博富邦滚塑防腐设备科技有限公司 |