Element-plus与其他UI库混用

原来项目用的是vue3 + vite4 + vuexy的,vuexy是国外的一个看上去很漂亮的组件库,项目在开发了一段时间后发现vuexy组件库里的表格、日期等组件很难用,但尴尬的是此时项目已经开发了一半,不方便整体更换UI库。

寻思可否把Element-plus里好用的组件筛选出来引入到项目里,让她们和正房vuexy组件们和谐共处。经过一番研究,查看Element-plus官网指南后做了一下尝试,完全可行,而且十分简单。

关键字:按需引入

一、安装Element-plus

# 选择一个你喜欢的包管理器

# NPM
$ npm install element-plus --save

# Yarn
$ yarn add element-plus

# pnpm
$ pnpm install element-plus

 

二、main.js 配置组件资源

import 'element-plus/theme-chalk/index.css'  // 引入组件样式
import { ElButton } from 'element-plus';   // 按需引入组件
import { Edit } from '@element-plus/icons-vue'  // 按需引入 Icon 图标

const app = createApp(App)

// 全局注册一些按需引入的组件
app.component('ElButton', ElButton)
app.component('Edit', Edit)

...

app.mount('#app')

 

三、vite.config.js 添加自动导入组件的配置

自动导入可以省很多代码,需要事先安装以下两个库

unplugin-auto-import
unplugin-vue-components

vite.config.js做如下配置:

// vite.config.js
import { defineConfig } from 'vite'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

export default defineConfig({
  // ...
  plugins: [
    // ...
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [ElementPlusResolver()],
    }),
  ],
})

这样配置后,vue文件里不需要写 import ElButton from 'xxx' 引入语句。

如果已经配置过AutoImport() 和 Components(),没关系,可以配置多组。

 

 四、添加语言支持

Element-plus默认语言为英文,有的组件比如 date-picker 的显示星期、日期格式等不太友好,需要使用中文语言库

在main.js添加:

import { ElConfigProvider } from 'element-plus' // 使用配置提供器设置Element-plus的语言为中文(在App.vue中使用此组件)
const app = createApp(App)
...
// 全局注册一些按需引入的组件
app.component('ElConfigProvider', ElConfigProvider)

在App.vue中:

1. 引入语言配置文件

import eleLang from 'element-plus/es/locale/lang/zh-cn'// Element-plus组件库中文语言支持

2. 将  <RouterView/> 外层套上<ElConfigProvider>包裹起来:

<ElConfigProvider :locale="eleLang">
      <RouterView />
      <ScrollToTop />
</ElConfigProvider>

 

 

 


 

大功告成

编写代码测试:

xxx.vue

<div>
    ...
    <ElButton type="primary" icon="edit" style="margin-left:8px;">Element-UI 按钮</ElButton>
    <el-button style="margin-left:8px;">按钮2</el-button>
</div>

 

结果:

 可以看到小秘已经和正太互称姐妹,一家人和谐的在一起了。

 

五、自定义颜色主题(参考自官网)

1. 创建自定义主题色sass文件,比如放到src目录下,叫 elementPlusTheme.scss

文件中重写ElementPlus的主题色变量值

// elementPlusTheme.scss
// 覆盖原库样式,自定义主题色
@forward 'element-plus/theme-chalk/src/common/var.scss' with ( $colors: ( 'primary': ( 'base': green, ), ), );
// 引入原库样式,必须在上方自定义主题色配置之后,否则无效果 @use "element-plus/theme-chalk/src/index.scss" as *;

注意,如果main.js里已经全局引入了样式,会覆盖掉上面的配置,会没有效果。必须删掉main.js里的引入,放到此文件底部。

 

2. 在vite.config.js中,plugins配置下增加:

   plugins: [
        ...,
        css: {
            preprocessorOptions: {
                scss: {
                    // ElementPlus 自定义主题配置
                    additionalData: `@use "~/elementPlusTheme.scss" as *;`,
                }
            }
        },
   ]

 

效果:

 

posted @ 2024-04-10 20:43  jsper  阅读(75)  评论(0编辑  收藏  举报