学习 Vue 3.0 与 Element Plus 时,最容易出现的误区是把官方文档从头翻到尾,却始终无法独立完成一个真实页面。原因在于文档侧重 API 说明,而项目实践需要把安装配置、组件联动、状态管理和样式定制串成一条线。本文会先把最核心的上手步骤过一遍,再给出配套示例和练习方向,最后集中说明容易踩坑的细节。

一、Vue 3.0 与 Element Plus 核心上手步骤
创建项目时建议直接使用 Vite 的官方模板,这样可以得到一个干净的 Vue 3 环境。下面的命令会生成项目目录并安装依赖,然后把 Element Plus 和图标包一起装好。Element Plus 只支持 Vue 3,因此不需要担心像 Vue 2 时代那样出现组件库与框架版本不匹配的问题。
npm create vite@latest vue3-element-plus-demo -- --template vue cd vue3-element-plus-demo npm install npm install element-plus @element-plus/icons-vue
安装完成后有两种引入方式。全量引入最简单,适合原型阶段快速验证功能,但打包体积会明显增大。按需引入通过 unplugin-auto-import 和 unplugin-vue-components 自动处理组件与 API 的导入,不仅能减小产物体积,还能让模板中的组件名直接可用,不需要手动逐个注册。下面的配置是 Vite 下的常见写法。
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
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: [
vue(),
AutoImport({
resolvers: [ElementPlusResolver()]
}),
Components({
resolvers: [ElementPlusResolver()]
})
]
})
如果选择全量引入,还需要手动加载样式文件和中文语言包。Element Plus 默认使用英文文案,日期选择器、分页器等组件如果直接使用会显示英文。通过配置 locale 选项可以全局切换到中文,避免每个组件单独设置。下面的 main.js 展示了完整引入和中文配置。
import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import zhCn from 'element-plus/es/locale/lang/zh-cn'
import App from './App.vue'
const app = createApp(App)
app.use(ElementPlus, { locale: zhCn })
app.mount('#app')
掌握组合式 API 是学习 Vue 3.0 的关键一步。与选项式 API 相比,组合式 API 把同一逻辑相关的数据和方法放在一起,修改大型组件时更容易维护。下面是一个最简单的表单示例,使用 reactive 管理表单数据,模板中直接绑定模型。可以看到 Element Plus 的组件在 Vue 3 中依然保持声明式用法,但响应式对象的组织方式发生了变化。
<template>
<el-form :model="form" label-width="80px">
<el-form-item label="用户名">
<el-input v-model="form.username" />
</el-form-item>
<el-form-item label="密码">
<el-input v-model="form.password" type="password" />
</el-form-item>
</el-form>
</template>
<script setup>
import { reactive } from 'vue'
const form = reactive({
username: '',
password: ''
})
</script>
需要注意的是,reactive 对象在解构后会丢失响应式,如果需要避免这个问题,可以使用 toRefs 或者直接使用 ref 来管理单个字段。对于复杂表单,建议把校验规则、提交逻辑和初始化数据分开存放,这样代码可读性更高,也便于后续封装成可复用的业务组件。
二、配套中文教程、示例项目与练习题推荐
官方中文文档仍然是查询组件属性最权威的入口,但文档示例相对简洁,缺少从零到一的业务串联。学习时可以把官方文档当作 API 手册,再配合一套完整的实战视频或图文教程。国内社区如掘金、思否以及 B 站上有很多 Vue 3 加 Element Plus 的系列内容,挑选时优先选择提供了完整代码仓库、章节划分清晰且持续更新的课程。动手改示例比单纯看视频效果更好,因为很多隐藏问题只有在实际操作时才会暴露出来。
示例项目的选题不需要追求大而全,中小型后台管理场景就足够覆盖高频组件。以下几个方向适合不同阶段的练习:
- 后台管理系统基础版:包含登录、侧边栏、面包屑、表格页和表单页,适合理解路由与布局。
- 学生信息管理:重点练习 ElTable 的筛选、排序、分页以及批量删除。
- 商品分类管理:练习树形控件、Dialog 嵌套表单和级联选择器。
- 个人记账本:适合练习日期选择器、统计卡片和本地数据持久化。
练习题可以按照由浅入深的顺序安排。不要一上来就封装复杂组件,先把基础页面跑通,再逐步重构。下面是一组参考题目和对应的考察点:
| 练习题 | 主要考察点 |
|---|---|
| 登录表单与记住我功能 | 表单校验、密码框、checkbox 状态持久化 |
| 带搜索和分页的表格 | ElTable 数据加载、ElPagination 联动、条件查询 |
| 新增编辑共用弹窗 | Dialog 封装、Form 数据重置、父组件通信 |
| 通用表格组件封装 | props 与 emit 设计、插槽透传、动态列配置 |
在线练习平台如 CodePen 和 StackBlitz 可以快速试验组件效果,但国内访问稳定性一般,建议以本地 Vite 项目为主。每完成一道题后,可以尝试把组件拆分成独立文件,或者给组件增加 loading、空状态和错误提示,这些细节在实际工作中非常常见。
三、常见问题与注意事项
样式丢失是最典型的问题之一。页面组件功能正常但没有任何样式,通常不是组件本身坏了,而是样式文件没有正确加载。全量引入时需要手动写 import 'element-plus/dist/index.css';如果使用按需自动导入,则需要确保 ElementPlusResolver 同时应用到 AutoImport 和 Components 两个插件中。还有一个容易被忽略的场景:ElMessage、ElNotification 这类函数式调用组件,即使配置了按需引入,也必须手动引入对应样式,或者干脆保持全量引入,否则弹窗会以无样式形式出现。
图标不显示的排查顺序是:先确认安装了 @element-plus/icons-vue,然后在组件中正确导入图标组件。Element Plus 的图标默认不会随组件库自动注册,需要使用哪个图标就导入哪个。下面的写法在 <el-icon> 内部放置图标组件前,必须先在 <script setup> 中导入对应的图标。
<template>
<el-button type="primary">
<el-icon><Edit /></el-icon>
编辑
</el-button>
</template>
<script setup>
import { Edit } from '@element-plus/icons-vue'
</script>
版本兼容方面,Element Plus 只支持 Vue 3,不能与 Vue 2 下的 Element UI 混用。如果是从旧项目迁移,需要同时升级 Vue、Vue Router 以及状态管理库。Node.js 建议使用 16 及以上版本,部分新版 Vite 对 Node 18 有硬性要求。安装依赖或构建过程中出现奇怪报错时,可以先检查 Node 版本和包管理器缓存。
表单校验是另一个高频问题。Vue 3 中规则对象通常放在 reactive 或 ref 中,并通过 :rules 绑定到 <el-form>。每个 <el-form-item> 的 prop 必须与表单模型中的字段名完全一致,否则校验不会触发。自定义校验函数需要正确执行 callback 或返回 Promise,成功分支也不能遗漏。下面是一个异步校验用户名是否重复的完整示例。
<template>
<el-form ref="formRef" :model="form" :rules="rules">
<el-form-item label="用户名" prop="username">
<el-input v-model="form.username" />
</el-form-item>
<el-form-item>
<el-button type="primary" native-type="submit" @click="submitForm">提交</el-button>
</el-form-item>
</el-form>
</template>
<script setup>
import { reactive, ref } from 'vue'
import { ElMessage } from 'element-plus'
const formRef = ref()
const form = reactive({ username: '' })
const validateUsername = (rule, value, callback) => {
if (!value) {
callback(new Error('请输入用户名'))
} else if (value.length < 3) {
callback(new Error('用户名至少 3 个字符'))
} else {
callback()
}
}
const rules = reactive({
username: [{ validator: validateUsername, trigger: 'blur' }]
})
const submitForm = () => {
formRef.value.validate((valid) => {
if (valid) {
ElMessage.success('提交成功')
} else {
ElMessage.error('请检查表单填写')
}
})
}
</script>
另一个容易被忽略的问题是按钮类型。HTML 原生按钮在表单中默认 type 为 submit,但 Element Plus 的 <el-button> 默认是 button,所以放在表单里时要手动设置 native-type="submit",或者直接监听 click 后手动调用 validate,否则回车提交会无效。主题定制方面,Element Plus 使用 CSS 变量控制主色,可以在全局样式里覆盖 --el-color-primary 等变量,比直接修改 less 源码更加稳定。
以上内容覆盖了从安装配置到实战练习再到避坑排查的主要环节。真正掌握 Vue 3.0 与 Element Plus,关键在于用练习项目反复打磨,而不是只看不写。把表单、表格、弹窗、分页这些高频组件分别做成独立模块,再组合成完整页面,学习效率会明显提升。
Vue3.0Element Plus中文教程修改时间:2026-10-02 06:22:41