安装

  1. yarn add element-ui

按需引入

  1. yarn add babel-plugin-component -D

在 babel.config.js 中添加 plugins 部分

  1. module.exports = {
  2. presets: ['@vue/cli-plugin-babel/preset'],
  3. plugins: [
  4. [
  5. 'component',
  6. {
  7. libraryName: 'element-ui',
  8. styleLibraryName: 'theme-chalk',
  9. },
  10. ],
  11. ],
  12. }

在入口文件中按需引入,并注册全局组件

  1. import Vue from 'vue';
  2. import { MessageBox, Button, Select } from 'element-ui';
  3. import App from './App.vue';
  4. Vue.component(Button.name, Button);
  5. Vue.component(Select.name, Select);
  6. /* 或写为
  7. * Vue.use(Button)
  8. * Vue.use(Select)
  9. */
  10. // 在原型上绑定方法
  11. Vue.prototype.$msgbox = MessageBox;
  12. Vue.prototype.$alert = MessageBox.alert;
  13. Vue.prototype.$confirm = MessageBox.confirm;
  14. Vue.prototype.$prompt = MessageBox.prompt;
  15. new Vue({
  16. el: '#app',
  17. render: h => h(App)
  18. });

自定义主题

新建 element-variables.scss 文件,按需引入样式

  1. /* 改变主题色变量 */
  2. $--color-primary: #16b6ae;
  3. /* 改变 icon 字体路径变量,必需 */
  4. $--font-path: '~element-ui/lib/theme-chalk/fonts';
  5. /* 按需引入样式文件 */
  6. /* @import '~element-ui/packages/theme-chalk/src/index'; */
  7. @import '~element-ui/packages/theme-chalk/src/message-box.scss';
  8. @import '~element-ui/packages/theme-chalk/src/message.scss';

在入口文件中引入scss文件

  1. import './assets/style/element-variables.scss'

使用 messageBox 组件

  1. // mixins.js
  2. import Vue from 'vue'
  3. import Component from 'vue-class-component'
  4. import { MessageBoxInputData } from 'element-ui/types/message-box'
  5. const map: { [key: string]: string } = {
  6. 'tag name duplicated': '标签名已存在',
  7. }
  8. // You can declare mixins as the same style as components.
  9. @Component
  10. export class tagHelper extends Vue {
  11. createTag() {
  12. this.$prompt('请输入标签名', '提示', {
  13. confirmButtonText: '确定',
  14. cancelButtonText: '取消',
  15. inputPattern: /.+/,
  16. inputErrorMessage: '标签名不可为空',
  17. })
  18. .then((res) => {
  19. const value = (res as MessageBoxInputData).value
  20. this.$store.commit('createTag', value)
  21. if (this.$store.state.createTagErrorFlag) {
  22. this.$message.error(
  23. map[this.$store.state.createTagErrorFlag.message] || '未知错误'
  24. )
  25. } else {
  26. this.$message({
  27. message: '创建成功!',
  28. type: 'success',
  29. })
  30. }
  31. })
  32. .catch(() => {
  33. this.$message({
  34. type: 'info',
  35. message: '取消输入',
  36. customClass: 'msg',
  37. })
  38. })
  39. }
  40. }

在vuex中使用

在 vuex 中不能使用this, 可以直接使用组件名

  1. import { Message } from 'element-ui'
  2. if (sameTag.length > 0) {
  3. Message.error('标签名已存在')
  4. } else {
  5. const tag = state.tagList.filter((i) => i.id === id)[0]
  6. tag.name = name
  7. store.commit('saveTag')
  8. Message({
  9. message: '更新成功',
  10. type: 'success',
  11. })
  12. }

自定义message组件的宽度

在控制台可以查看到组件的类名以及它拥有的样式,使用类名就可以自定义样式啦
image.png

  1. .el-message {
  2. min-width: 300px;
  3. }
  4. .el-message-box {
  5. width: 300px;
  6. }

也可以通过customClass属性给组件自定义类名

  1. this.$message({
  2. type: 'info',
  3. message: '取消输入',
  4. customClass: 'msg',
  5. })

TS报错

Property ‘value’ does not exist on type ‘MessageBoxData’
解决方法:进行类型强转

  1. .then((res) => {
  2. const value = (res as MessageBoxInputData).value
  3. // ...
  4. }
  5. )

DatePicker组件

  1. import { DatePicker } from 'element-ui'
  2. Vue.use(DatePicker)
  1. @import '~element-ui/packages/theme-chalk/src/date-picker.scss';
  1. <el-date-picker
  2. v-model="date"
  3. type="date"
  4. :editable=false
  5. :picker-options="pickerOptions"
  6. placeholder="选择日期">
  7. </el-date-picker>
  1. date = new Date()
  2. // 让今天之后的日期都不能被选择
  3. pickerOptions = {
  4. disabledDate(time: Date) {
  5. return time.getTime() > Date.now() - 8.64e6
  6. }
  7. }
  8. record: RecordItem = {
  9. tags: [], notes: '', type: '-', amount: 0, createAt: this.date
  10. };
  11. @Watch('date')
  12. onChildChanged(val: Date) {
  13. this.record.createAt = val
  14. }
  1. .el-date-editor.el-input {
  2. margin-left: auto;
  3. width: 160px;
  4. }