ant-design-pro使用qiankun微服务配置动态主题色的问题

使用微服务后,遇到一个问题,主应用和子应用的主题色不一致.希望可以通过主应用的颜色动态变换子应用的主题色
ant-design-pro可以通过config.ts配置全局主题色所有最优的方法是可以通过改变主题色,来动态配置.官方最新版本的https://github.com/ant-design/ant-design-pro/releases/tag/v5.2.0已经支持了,通过<SettingDrawer>设置之前的版本不支持直接修改主题色.但是ant-design支持全局修改组件颜色跟着官方的步骤修改配置https://ant.design/docs/react/customize-theme-variable-cn

这个实现主要是用<ConfigProvider></ConfigProvider>这个组件将页面包起来,设置一个前缀,ant会给所有的组件增加前缀的样式名.在引入这个前缀样式的文件就可以修改颜色了其实是先写好两套样式,动态改变class类名.例如,<div ></div> 在微服务显示时,变为<div ></div> 引入.pre-defaut的样式
子应用修改child先生成一个前缀的css文件

lessc --js --modify-var="ant-prefix=custom" node_modules/antd/dist/antd.variable.less modified.css

如果没有全局装less 需要先全局装less npm i less -g执行后项目根目录下会多一个custom.css文件
修改global.less文件@import (reference) '~antd/es/style/themes/index';@import './custom.css';
修改app.tsx文件

主应用修改

修改app.tsx文件

// 引入组件
import { ConfigProvider } from 'antd';

// 设置前缀,和主题色
ConfigProvider.config({
  prefixCls: 'custom',
  iconPrefixCls: 'custom',
  theme: {
    primaryColor: '#1890ff',
  },
})

这样就配置好了看一下效果: 主应用本身的主题色是蓝色,子应用是红色

现在页面的颜色已经变了,但是菜单没变因为在app.tsx里面,我们用<ConfigProvider></ConfigProvider>包裹的是children,也就是layout里面的东西.layout没有被包裹在内有几种解决方法,一是自定义layout,不用默认的layout.但是这种样式都要自己写,如果项目不是很自定义不建议用二是,引入menu.css的,加强样式层级,覆盖子组件的样式.具体实现找到菜单样式文件

复制到一个新文件里,增加层级.如下,增加一个id类名包裹.这个id是你父应用的最外层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;
  }
  ...
}

放到项目中,在global.less中引入

import './menu.less';

三. 在父应用开启样式隔离, 相同类名的样式就不会覆盖了

父应用app.tsx

export const qiankun = fetch('/config').then(({ apps }: any) => ({
  // 注册子应用信息
  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 }, // 开启沙箱,样式隔离
  // 完整生命周期钩子请看 https://qiankun.umijs.org/zh/api/#registermicroapps-apps-lifecycles
  lifeCycles: {
    afterMount: (props: any) => {
      console.log(props);
    },
  },
  // 支持更多的其他配置,详细看这里 https://qiankun.umijs.org/zh/api/#start-opts
}))

这样就解决ant-design样式问题
不过如果你的样式是自己自定义的,ant是不会给拟添加前缀需要自己定义一个变量 例:测试页面

<div className={style.back}>
  自定义样式
</div>

.less文件

.back {
    height: 100px;
    background-color: var(--chid-primary-color); // 将颜色写成变量
  }

在子应用中 global.less中定义

html {
  --chid-primary-color: #f26;
}

在父应用global.less中定义

#root {
  --chid-primary-color: #1890ff;
}

最终效果:子应用 父应用

githup源码

父应用: https://github.com/shengbid/antpro-parent

子应用: https://github.com/shengbid/antpro-child

到此这篇关于ant-design-pro使用qiankun微服务配置动态主题色的文章就介绍到这了,更多相关ant-design-pro微服务配置动态主题色内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 浅谈Ant Design Pro 菜单自定义 icon

    Ant Design Pro 官方文档说明 在菜单中使用自定义的 icon 由于 umi 的限制,在 router.config.js 是不能直接只是用组件的,Pro 中暂时支持 使用 ant.design本身的 icon type,和传入一个 img 的 url.只需要直接在 icon 属性上配置即可,如果是个 url,Pro 会自动处理为一个 img 标签. 如果这样还不能满足需求,可以自定义 getIcon 方法. 如果你想使用 iconfont 的图标,你可以使用ant.desgin的自

  • 详解ant-design-pro使用qiankun微服务

    目录 主应用配置 子应用配置 微服务现在挺火的,优点也很明显如果有多个应用都有相同页面时,就可以使用微服务,可以避免重复写代码 在网上搜了下,很多例子都是基于官方文档的例子,官方文档:https://umijs.org/zh-CN/plugins/plugin-qiankun.比较简单,实际使用场景会有特殊情况我根据自己项目的情况总结了一下使用方法 我们两个项目都是ant-design-pro的,我这里的例子也用的ant-design-pro项目生成的, githup地址:https://git

  • Ant Design Pro 之 ProTable使用操作

    标签<ProTable> Pro-Table 是阿里Ant Design Pro V4版本,在Table基础上再封装的一个组件,包含完整的增删改查逻辑,不用复杂的操作,简单几个配置即可实现 官网Api地址 https://protable.ant.design/ 示例 V4版本刚出不久,网上的教程还比较少,踩了不少坑,把自己学习过程分享出来,希望可以帮到你 创建项目(需要node.js及npm环境) npm config set registry https://registry.npm.ta

  • ant-design-pro使用qiankun微服务配置动态主题色的问题

    使用微服务后,遇到一个问题,主应用和子应用的主题色不一致.希望可以通过主应用的颜色动态变换子应用的主题色ant-design-pro可以通过config.ts配置全局主题色所有最优的方法是可以通过改变主题色,来动态配置.官方最新版本的https://github.com/ant-design/ant-design-pro/releases/tag/v5.2.0已经支持了,通过<SettingDrawer>设置之前的版本不支持直接修改主题色.但是ant-design支持全局修改组件颜色跟着官方的

  • ant design vue导航菜单与路由配置操作

    此功能包含: 1.根据动态路由自动展开与自动选择对应路由所在页面菜单 2.只展开一个子菜单 3.兄弟组件控制菜单与路由 <a-menu :openKeys="openKeys" :selectedKeys="selectedKeys" mode="inline" theme="dark" :inlineCollapsed="$store.state.isCollapse" @click='select

  • ant design pro中可控的筛选和排序实例

    我就废话不多说了,大家还是直接看代码吧~ /** * Created by hao.cheng on 2017/4/15. */ import React from 'react'; import { Table, Button } from 'antd'; const data = [{ key: '1', name: '张三', age: 22, address: '浙江省温州市', }, { key: '2', name: '李四', age: 42, address: '湖南省湘潭市',

  • 在Ant Design Pro登录功能中集成图形验证码组件的方法步骤

    前言: 本篇文章只介绍在Ant Design Pro登录功能中集成图形验证码组件的方法步骤,服务端方法请参考<基于OAuth2.0授权系统的验证码功能> 正文: 在Ant Design Pro模板中,使用账号密码登录功能部分(如下图),并没有做图形验证码的开发,所以这部分功能就需要我们自己去实现.这里登录功能其实本质是一个表单提交,所以我们只需自己开发一个图形验证码表单控件就可以,具体实现如下. 1. 图形验证码表单控件代码CaptchaInput.tsx: import React, {us

  • Ant Design Pro 下实现文件下载的实现代码

    最近编写在页面内通过 AJAX 请求服务器下载文件遇到一些问题,网上找的资料和介绍大多不健全不系统,最终自己摸索出来的解决方案,先简单写个初稿,后面再详细补充. 表一:前端请求后端下载文件的各种情况 请求方法 请求方式 响应结果 GET 页面跳转 文件对应的 URL POST AJAX 文件的二进制流 首先,需要在 src/service/api.js 里声明对应请求返回的文件类型: import request from '@/utils/request'; export async func

  • ant design的table组件实现全选功能以及自定义分页

    我就废话不多说了,大家还是直接看代码吧~ ant design的table组件实现全选功能以及自定义分页 直接附上全部代码以及截图了 import './index.scss'; import React from 'react'; import {Checkbox, Table, Popconfirm} from 'antd'; class TestComponent extends Component { constructor (props) { super(props); this.st

  • 微服务架构之服务注册与发现实践示例详解

    目录 1 服务注册中心 4种注册中心技术对比 2 Spring Cloud 框架下实现 2.1 Spring Cloud Eureka 2.1.1 创建注册中心 2.1.2 创建客户端 2.2 Spring Cloud Consul 2.2.1 Consul 的优势 2.2.2 Consul的特性 2.2.3 安装Consul注册中心 2.2.4 创建服务提供者 3 总结 微服务系列前篇 详解微服务架构及其演进史 微服务全景架构全面瓦解 微服务架构拆分策略详解 微服务架构之服务注册与发现功能详解

随机推荐