ant-design-pro使用qiankun微服務(wù)配置動(dòng)態(tài)主題色的問(wèn)題
使用微服務(wù)后,遇到一個(gè)問(wèn)題,主應(yīng)用和子應(yīng)用的主題色不一致.希望可以通過(guò)主應(yīng)用的顏色動(dòng)態(tài)變換子應(yīng)用的主題色
ant-design-pro可以通過(guò)config.ts配置全局主題色所有最優(yōu)的方法是可以通過(guò)改變主題色,來(lái)動(dòng)態(tài)配置.官方最新版本的https://github.com/ant-design/ant-design-pro/releases/tag/v5.2.0已經(jīng)支持了,通過(guò)<SettingDrawer>設(shè)置之前的版本不支持直接修改主題色.但是ant-design支持全局修改組件顏色跟著官方的步驟修改配置https://ant.design/docs/react/customize-theme-variable-cn
這個(gè)實(shí)現(xiàn)主要是用<ConfigProvider></ConfigProvider>這個(gè)組件將頁(yè)面包起來(lái),設(shè)置一個(gè)前綴,ant會(huì)給所有的組件增加前綴的樣式名.在引入這個(gè)前綴樣式的文件就可以修改顏色了其實(shí)是先寫(xiě)好兩套樣式,動(dòng)態(tài)改變class類名.例如,<div ></div> 在微服務(wù)顯示時(shí),變?yōu)?lt;div ></div> 引入.pre-defaut的樣式
子應(yīng)用修改child先生成一個(gè)前綴的css文件
lessc --js --modify-var="ant-prefix=custom" node_modules/antd/dist/antd.variable.less modified.css
如果沒(méi)有全局裝less 需要先全局裝less npm i less -g執(zhí)行后項(xiàng)目根目錄下會(huì)多一個(gè)custom.css文件
修改global.less文件@import (reference) '~antd/es/style/themes/index';@import './custom.css';
修改app.tsx文件
主應(yīng)用修改
修改app.tsx文件
// 引入組件 import { ConfigProvider } from 'antd'; // 設(shè)置前綴,和主題色 ConfigProvider.config({ prefixCls: 'custom', iconPrefixCls: 'custom', theme: { primaryColor: '#1890ff', }, })
這樣就配置好了看一下效果: 主應(yīng)用本身的主題色是藍(lán)色,子應(yīng)用是紅色
現(xiàn)在頁(yè)面的顏色已經(jīng)變了,但是菜單沒(méi)變因?yàn)樵赼pp.tsx里面,我們用<ConfigProvider></ConfigProvider>包裹的是children,也就是layout里面的東西.layout沒(méi)有被包裹在內(nèi)有幾種解決方法,一是自定義layout,不用默認(rèn)的layout.但是這種樣式都要自己寫(xiě),如果項(xiàng)目不是很自定義不建議用二是,引入menu.css的,加強(qiáng)樣式層級(jí),覆蓋子組件的樣式.具體實(shí)現(xiàn)找到菜單樣式文件
復(fù)制到一個(gè)新文件里,增加層級(jí).如下,增加一個(gè)id類名包裹.這個(gè)id是你父應(yīng)用的最外層id
#root-master { /* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */ /* stylelint-disable no-duplicate-selectors */ /* stylelint-disable */ /* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */ a { text-decoration: none; } ... }
放到項(xiàng)目中,在global.less中引入
import './menu.less';
三. 在父應(yīng)用開(kāi)啟樣式隔離, 相同類名的樣式就不會(huì)覆蓋了
父應(yīng)用app.tsx
export const qiankun = fetch('/config').then(({ apps }: any) => ({ // 注冊(cè)子應(yīng)用信息 apps: [ { name: 'child', // 唯一 id // entry: '//localhost:8091', // html entry entry: entryUrl[NODE_ENV || 'development'], // html entry props: { isMenu: false, accountInfo: { autoLogin: true, password: "ant.design", type: "account", username: "admin" } } }, ], sandbox: { strictStyleIsolation: true }, // 開(kāi)啟沙箱,樣式隔離 // 完整生命周期鉤子請(qǐng)看 https://qiankun.umijs.org/zh/api/#registermicroapps-apps-lifecycles lifeCycles: { afterMount: (props: any) => { console.log(props); }, }, // 支持更多的其他配置,詳細(xì)看這里 https://qiankun.umijs.org/zh/api/#start-opts }))
這樣就解決ant-design樣式問(wèn)題
不過(guò)如果你的樣式是自己自定義的,ant是不會(huì)給擬添加前綴需要自己定義一個(gè)變量 例:測(cè)試頁(yè)面
<div className={style.back}> 自定義樣式 </div>
.less文件
.back { height: 100px; background-color: var(--chid-primary-color); // 將顏色寫(xiě)成變量 }
在子應(yīng)用中 global.less中定義
html { --chid-primary-color: #f26; }
在父應(yīng)用global.less中定義
#root { --chid-primary-color: #1890ff; }
最終效果:子應(yīng)用 父應(yīng)用
githup源碼
父應(yīng)用: https://github.com/shengbid/antpro-parent
子應(yīng)用: https://github.com/shengbid/antpro-child
到此這篇關(guān)于ant-design-pro使用qiankun微服務(wù)配置動(dòng)態(tài)主題色的文章就介紹到這了,更多相關(guān)ant-design-pro微服務(wù)配置動(dòng)態(tài)主題色內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javascript Blob對(duì)象實(shí)現(xiàn)文件下載
這篇文章主要為大家介紹了vue組件通信的幾種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2021-12-12js實(shí)現(xiàn)StringBuffer的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇js實(shí)現(xiàn)StringBuffer的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09利用CSS、JavaScript及Ajax實(shí)現(xiàn)高效的圖片預(yù)加載
圖片預(yù)加載想必大家都不陌生吧,實(shí)現(xiàn)預(yù)加載圖片有很多方法,包括使用CSS、JavaScript及兩者的各種組合。這些技術(shù)可根據(jù)不同設(shè)計(jì)場(chǎng)景設(shè)計(jì)出相應(yīng)的解決方案,十分高效2013-10-10JS高級(jí)調(diào)試技巧:捕獲和分析 JavaScript Error詳解
前端工程師都知道 JavaScript 有基本的異常處理能力。我們可以 throw new Error(),瀏覽器也會(huì)在我們調(diào)用 API 出錯(cuò)時(shí)拋出異常。但估計(jì)絕大多數(shù)前端工程師都沒(méi)考慮過(guò)收集這些異常信息2014-03-03JS實(shí)現(xiàn)將鏈接生成二維碼并轉(zhuǎn)為圖片的方法
這篇文章主要介紹了JS實(shí)現(xiàn)將鏈接生成二維碼并轉(zhuǎn)為圖片的方法,涉及qrcodejs插件及js圖片生成相關(guān)操作技巧,需要的朋友可以參考下2018-03-03JS支持帶x身份證號(hào)碼驗(yàn)證函數(shù)
身份證號(hào)碼驗(yàn)證-支持新的帶x身份證2008-08-08javaScript年份下拉列表框內(nèi)容為當(dāng)前年份及前后50年
本文介紹的這個(gè)javaScript年份下拉列表框內(nèi)容為當(dāng)前年份及前后50年,默認(rèn)顯示當(dāng)前年份,大家可以學(xué)習(xí)下2014-05-05JS實(shí)現(xiàn)iframe自適應(yīng)高度的方法(兼容IE與FireFox)
這篇文章主要介紹了JS實(shí)現(xiàn)iframe自適應(yīng)高度的方法,涉及javascript與iframe交互動(dòng)態(tài)操作頁(yè)面元素屬性的相關(guān)技巧,需要的朋友可以參考下2016-06-06詳解javascript立即執(zhí)行函數(shù)表達(dá)式IIFE
本文主要介紹了javascript立即執(zhí)行函數(shù)表達(dá)式IIFE的相關(guān)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02