Element Plus является современной переработкой Element UI для Vue 3, поэтому при миграции важно понимать ключевые изменения:
size="medium" по умолчанию заменяется на глобальную
настройку через config-provider.Для перехода на Element Plus используется современный пакетный менеджер:
npm install element-plus
В проекте на Vue 3 подключение осуществляется через основной файл
main.js или main.ts:
import { createApp } from 'vue'
import App from './App.vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
const app = createApp(App)
app.use(ElementPlus)
app.mount('#app')
Особенности настройки глобальных параметров:
import { ElMessage, ElNotification } from 'element-plus'
app.config.globalProperties.$message = ElMessage
app.config.globalProperties.$notify = ElNotification
Это позволяет использовать уведомления и сообщения во всех компонентах, аналогично Element UI.
Кнопки в Element Plus имеют схожий API, но появились новые варианты и улучшена поддержка Composition API:
<template>
<el-button type="primary" @click="handleClick">Нажать</el-button>
</template>
<script setup>
import { ElButton } from 'element-plus'
function handleClick() {
console.log('Кнопка нажата')
}
</script>
Изменения по сравнению с Element UI:
<script setup>.В Element Plus валидация форм стала более гибкой:
<template>
<el-form :model="form" :rules="rules" ref="formRef">
<el-form-item label="Имя" prop="name">
<el-input v-model="form.name"></el-input>
</el-form-item>
<el-button @click="submitForm">Отправить</el-button>
</el-form>
</template>
<script setup>
import { ref } from 'vue'
const form = ref({ name: '' })
const rules = ref({
name: [{ required: true, message: 'Введите имя', trigger: 'blur' }]
})
const formRef = ref(null)
function submitForm() {
formRef.value.validate(valid => {
if (valid) console.log('Форма валидна')
else console.log('Ошибка валидации')
})
}
</script>
Изменения:
ref вместо this.$refs.ElDialog в Element Plus стал полностью поддерживать
Composition API:
<template>
<el-button @click="dialogVisible = true">Открыть диалог</el-button>
<el-dialog v-model="dialogVisible" title="Диалог">
Содержимое окна
</el-dialog>
</template>
<script setup>
import { ref } from 'vue'
const dialogVisible = ref(false)
</script>
Изменения по сравнению с Element UI:
this.dialogVisible.Element Plus предлагает ElConfigProvider для глобальных
настроек компонентов:
<el-config-provider :size="'small'" :z-index="3000">
<App />
</el-config-provider>
Это заменяет устаревшую настройку
Vue.prototype.$ELEMENT.
Для оптимизации бандла рекомендуется использовать модульный импорт через Vite или Webpack:
import { ElButton, ElForm, ElFormItem } from 'element-plus'
import 'element-plus/es/components/button/style/css'
import 'element-plus/es/components/form/style/css'
import 'element-plus/es/components/form-item/style/css'
Особенности:
.native применяется обычный @click.<template #slotName>, старый синтаксис
<template slot="slotName"> устарел.before-close в диалогах) можно
обрабатывать через промисы.В Element Plus глобальные уведомления теперь являются отдельными функциями:
import { ElMessage, ElNotification } from 'element-plus'
ElMessage({
message: 'Операция выполнена',
type: 'success'
})
ElNotification({
title: 'Важное уведомление',
message: 'Содержимое уведомления'
})
Особенности миграции:
Vue.prototype,
достаточно импорта.:root {
--el-color-primary: #409eff;
--el-color-success: #67c23a;
}
this.$refs в
<script setup> вместо ref.ElConfigProvider для глобальных
настроек.