PanJiaChen / vue-element-admin

:tada: A magical vue admin https://panjiachen.github.io/vue-element-admin
MIT License
87.57k stars 30.43k forks source link

按需引入elementui 导致动态换肤主题被默认主题替换 #2607

Open songStar0904 opened 4 years ago

songStar0904 commented 4 years ago

elementui是按需引入的,它的js和css是在路由懒加载时加载的,所以导致动态换肤的主题样式chalk-style会被按需引入的组件默认样式给覆盖。 image

image

我在本地localstorage存了主题色,每次web启动的时候加载动态换肤的主题,那么webpack 按需引入elementui 可不可不引入它的css,或者还有其他方法解决。

mayunhai commented 4 years ago

localstorage 存了主题色,同步给src\components\ThemePicker\index.vue 里面的this.$store.state.settings.theme即可,注意 修改 VUEX值一定要通过 mutations 详细用法看 VUEX 官方文档,不过这里作者已经封装好了方法的。直接在 created 钩子 调用下面代码就能实现:

    this.$store.dispatch('settings/changeSetting', {
      key: 'theme',
      value: '#f5222d' // 本地缓存的主题颜色
    })
songStar0904 commented 4 years ago

localstorage 存了主题色,同步给src\components\ThemePicker\index.vue 里面的this.$store.state.settings.theme即可,注意 修改 VUEX值一定要通过 mutations 详细用法看 VUEX 官方文档,不过这里作者已经封装好了方法的。直接在 created 钩子 调用下面代码就能实现:

    this.$store.dispatch('settings/changeSetting', {
      key: 'theme',
      value: '#f5222d' // 本地缓存的主题颜色
    })

我的问题是按需引入elementui 导致动态换肤主题被默认主题替换这个要如何解决,已经做了本地存主题色哦

mayunhai commented 4 years ago

即便是 按需引入elementui CSS也是一次性全量引入的啊

songStar0904 commented 4 years ago

即便是 按需引入elementui CSS也是一次性全量引入的啊

并不是 路由懒加载 页面的js,css都是跳转到本页面才加载的

lianruhe commented 4 years ago

遇到同样的问题,使用 babel-plugin-component 按需引入组件,同时也会引入样式,即使没有配 styleLibraryName。这样动态引入 组件的时候也也把组件样式引入,会把修改了主题颜色的样式覆盖掉。

Chang1ng commented 4 years ago

遇到同样的问题,使用 babel-plugin-component 按需引入组件,同时也会引入样式,即使没有配 styleLibraryName。这样动态引入 组件的时候也也把组件样式引入,会把修改了主题颜色的样式覆盖掉。

+1

dongH555 commented 3 years ago

遇到同样的问题,使用 babel-plugin-component 按需引入组件,同时也会引入样式,即使没有配 styleLibraryName。这样动态引入 组件的时候也也把组件样式引入,会把修改了主题颜色的样式覆盖掉。

+1请问目前有解决的方案?

lianruhe commented 3 years ago

遇到同样的问题,使用 babel-plugin-component 按需引入组件,同时也会引入样式,即使没有配 styleLibraryName。这样动态引入 组件的时候也也把组件样式引入,会把修改了主题颜色的样式覆盖掉。

+1请问目前有解决的方案?

组件按需引入是引入 css 样式,所以自定义不了主题色。如果自定义的主题色是确定的话,可以在这里 https://element.eleme.cn/#/zh-CN/theme/preview 自定义生成一套主题放在本地,styleLibraryName 配置为本地主题路径