Для интеграции Element Plus в проект на Vue 3 через Vue CLI необходимо сначала убедиться, что установлен Node.js версии 14 или выше и актуальная версия Vue CLI. Установка Element Plus производится через npm или yarn:
npm install element-plus --save
# или
yarn add element-plus
После установки подключение библиотеки может выполняться глобально
или компонентно. Для глобального подключения в 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')
Ключевой момент — импорт CSS-стилей, без которого компоненты будут отображаться некорректно.
Вместо глобальной регистрации компонентов можно подключать их локально внутри конкретных Vue-компонентов. Это уменьшает размер бандла и повышает производительность:
<template>
<el-button type="primary">Нажми меня</el-button>
</template>
<script>
import { ElButton } from 'element-plus'
export default {
components: {
ElButton
}
}
</script>
Такой подход особенно эффективен при работе с крупными проектами, где используется множество компонентов, но не все одновременно.
Element Plus поддерживает настраиваемые темы с использованием CSS-переменных. Для применения кастомной темы достаточно переопределить CSS-переменные в основном файле стилей:
:root {
--el-color-primary: #409eff;
--el-button-border-radius: 8px;
--el-font-size-base: 16px;
}
После этого все компоненты автоматически используют новые значения цветов, размеров и отступов. Можно также подключить SCSS- или Less-версии переменных для более гибкой кастомизации:
@use "element-plus/theme-chalk/src/index" with (
$--color-primary: #409eff,
$--border-radius-base: 8px
);
Element Plus предоставляет глобальный объект конфигурации
ElConfigProvider, который позволяет задавать настройки для
всех компонентов на уровне приложения:
<template>
<el-config-provider :size="'small'" :z-index="3000">
<el-button>Маленькая кнопка</el-button>
</el-config-provider>
</template>
<script>
import { ElConfigProvider, ElButton } from 'element-plus'
export default {
components: {
ElConfigProvider,
ElButton
}
}
</script>
Параметры, такие как size, zIndex и
локализация (locale), передаются через
ElConfigProvider и автоматически наследуются всеми
дочерними компонентами.
Element Plus использует отдельный пакет для иконок. Для подключения
иконок необходимо установить @element-plus/icons-vue:
npm install @element-plus/icons-vue --save
Использование иконки в компоненте:
<template>
<el-button type="primary" icon="Search">
Поиск
</el-button>
</template>
<script>
import { ElButton } from 'element-plus'
import { Search } from '@element-plus/icons-vue'
export default {
components: {
ElButton,
Search
}
}
</script>
Для удобства можно создавать глобальную регистрацию всех используемых иконок, чтобы не импортировать их вручную в каждом компоненте.
Формы в Element Plus строятся с использованием компонентов
<el-form> и <el-form-item>.
Основные моменты:
v-model.rules.Пример:
<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-form-item>
<el-button type="primary" @click="submitForm">Отправить</el-button>
</el-form-item>
</el-form>
</template>
<script>
import { ref } from 'vue'
import { ElForm, ElFormItem, ElInput, ElButton } from 'element-plus'
export default {
components: { ElForm, ElFormItem, ElInput, ElButton },
setup() {
const formRef = ref(null)
const form = ref({ name: '' })
const rules = {
name: [
{ required: true, message: 'Введите имя', trigger: 'blur' }
]
}
const submitForm = () => {
formRef.value.validate(valid => {
if (valid) {
console.log('Форма валидна', form.value)
} else {
console.log('Ошибка валидации')
}
})
}
return { form, rules, submitForm, formRef }
}
}
</script>
Особенность Element Plus — возможность гибко комбинировать правила валидации, использовать кастомные функции и динамически изменять состояние полей.
Element Plus поддерживает несколько языков. Для подключения локализации необходимо импортировать нужный язык и передать его в конфигурацию:
import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import locale from 'element-plus/lib/locale/lang/ru'
const app = createApp(App)
app.use(ElementPlus, { locale })
Это автоматически переведет все стандартные сообщения и текст интерфейса, включая кнопки подтверждения, уведомления и подсказки.
Компоненты Element Plus полностью совместимы с Vue
Router и Vuex/Pinia. Например, кнопка для
навигации может использовать router-link:
<el-button type="primary">
<router-link to="/dashboard">Перейти</router-link>
</el-button>
Для динамических данных формы или таблиц можно использовать состояние из Vuex/Pinia, что обеспечивает реактивное обновление интерфейса без дополнительного кода синхронизации.
Для больших проектов важна оптимизация бандла. Вместо глобального
импорта всех компонентов можно использовать on-demand
import с помощью unplugin-vue-components и
unplugin-auto-import:
// vite.config.js или vue.config.js для Vue CLI с плагинами
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
export default {
plugins: [
Components({
resolvers: [ElementPlusResolver()],
}),
],
}
Это позволит импортировать только те компоненты, которые реально используются, снижая размер финального бандла.
Компоненты <el-table> и
<el-pagination> обеспечивают мощные возможности для
отображения больших массивов данных:
<el-table :data="tableData" style="width: 100%">
<el-table-column prop="id" label="ID" width="50"></el-table-column>
<el-table-column prop="name" label="Имя"></el-table-column>
<el-table-column prop="email" label="Email"></el-table-column>
</el-table>
<el-pagination
background
layout="prev, pager, next"
:total="100"
@current-change="handlePageChange">
</el-pagination>
Методы пагинации позволяют легко синхронизировать данные с сервером через API, обновляя таблицу при смене страницы.
Эти техники позволяют полностью интегрировать Element Plus с проектом на Vue CLI, обеспечивая гибкость, масштабируемость и поддержку современных стандартов фронтенд-разработки.