【Element Plus 】上手入门教程(基于 Vue 3)——从安装到实战,附最佳实践

🎉 Element Plus 上手入门教程(基于 Vue 3)——从安装到实战,附最佳实践

“Element Plus 是 Element UI 的 Vue 3 版本,专为现代中后台系统打造。”


参考:【antd-mobile】React + antd-mobile 上手开发教程(2025 最新版)

📜 一、Element Plus 简介

Element Plus饿了么 团队开源的一套 Vue 3 组件库,适用于开发 PC 端的中后台管理系统。它提供了丰富的组件、良好的文档和对 TypeScript 的原生支持。

✅ 主要特性:

特性描述
🧩 丰富组件包括表单、表格、弹窗、导航、布局等常用 UI 组件
🌞 暗黑模式支持 dark mode
🧊 开箱即用支持自动导入(unplugin-vue-components)
🔤 中英文支持官方支持 i18n 多语言切换
🛠️ TypeScript 友好原生支持类型推导

🛠️ 二、安装 Element Plus

1. 创建 Vue 3 项目(Vite + Vue 3 示例)

npm create vite@latest my-element-app --template vue-ts
cd my-element-app
npm install

2. 安装 Element Plus

npm install element-plus --save

🧩 三、配置 Element Plus

方式一:全局引入(推荐新手使用)

修改 main.jsmain.ts
// src/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')

方式二:按需导入(推荐进阶使用)

安装插件(unplugin-vue-components)
npm install -D unplugin-vue-components
配置 vite.config.js
// vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

export default defineConfig({
  plugins: [
    vue(),
    Components({
      resolvers: [ElementPlusResolver()],
    }),
  ],
})

效果:你只需在 .vue 文件中直接使用组件标签,无需手动 importapp.use()


🏗️ 四、实际业务场景最佳实践

场景一:登录页(表单验证 + 弹窗提示)

1. 使用 el-form 实现登录表单
<template>
  <el-form :model="form" :rules="rules" label-width="120px" ref="formRef">
    <el-form-item label="用户名" prop="username">
      <el-input v-model="form.username" />
    </el-form-item>

    <el-form-item label="密码" prop="password">
      <el-input v-model="form.password" type="password" show-password />
    </el-form-item>

    <el-form-item>
      <el-button @click="onSubmit">登录</el-button>
    </el-form-item>
  </el-form>
</template>

<script setup>
import { ref } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'

const form = ref({
  username: '',
  password: ''
})

const rules = {
  username: [
    { required: true, message: '请输入用户名', trigger: 'blur' },
    { min: 3, max: 15, message: '长度在3到15个字符之间', trigger: 'blur' }
  ],
  password: [
    { required: true, message: '请输入密码', trigger: 'blur' },
    { min: 6, message: '密码至少6位', trigger: 'blur' }
  ]
}

const formRef = ref()

const onSubmit = () => {
  formRef.value.validate((valid) => {
    if (valid) {
      // 模拟登录请求
      ElMessageBox.confirm('确定提交吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        ElMessage.success('提交成功!')
      }).catch(() => {
        ElMessage.info('已取消')
      })
    } else {
      console.log('验证失败')
      return false
    }
  })
}
</script>

场景二:数据展示页(表格 + 分页)

使用 el-table 展示用户列表
<template>
  <div>
    <el-table :data="users" style="width: 100%">
      <el-table-column prop="id" label="ID" width="80"></el-table-column>
      <el-table-column prop="name" label="姓名"></el-table-column>
      <el-table-column prop="email" label="邮箱"></el-table-column>
      <el-table-column prop="role" label="角色"></el-table-column>
      <el-table-column label="操作">
        <template #default="scope">
          <el-button size="small" @click="editUser(scope.row)">编辑</el-button>
          <el-button size="small" type="danger" @click="deleteUser(scope.row)">删除</el-button>
        </template>
      </el-table-column>
    </el-table>

    <!-- 分页 -->
    <el-pagination
      layout="prev, pager, next"
      :total="100"
      @current-change="handlePageChange"
    />
  </div>
</template>

<script setup>
import { ref } from 'vue'

const users = ref([
  { id: 1, name: '张三', email: 'zhangsan@example.com', role: '管理员' },
  { id: 2, name: '李四', email: 'lisi@example.com', role: '普通用户' },
])

const editUser = (user) => {
  alert(`编辑用户:${user.name}`)
}

const deleteUser = (user) => {
  alert(`删除用户:${user.name}`)
}

const handlePageChange = (pageNum) => {
  console.log('当前页码:', pageNum)
}
</script>

场景三:顶部导航栏 + 左侧菜单(Layout + Menu)

使用 el-container, el-header, el-aside, el-menu 构建布局
<template>
  <el-container style="height: 100vh">
    <el-aside width="200px">
      <el-menu default-active="1" class="el-menu-vertical-demo">
        <el-menu-item index="1"><span>首页</span></el-menu-item>
        <el-menu-item index="2"><span>用户管理</span></el-menu-item>
        <el-menu-item index="3"><span>权限管理</span></el-menu-item>
      </el-menu>
    </el-aside>

    <el-container>
      <el-header style="background-color: #409EFF; color: white">
        后台管理系统
      </el-header>

      <el-main>
        <router-view /> <!-- 路由内容区域 -->
      </el-main>
    </el-container>
  </el-container>
</template>

🧪 五、常见面试题汇总(含答案)

Q1:如何实现 Element Plus 的按需加载?

:通过 unplugin-vue-components 插件 + ElementPlusResolver 自动导入组件,无需手动引入。


Q2:Element Plus 如何支持暗黑主题?

:使用官方提供的 dark 模式,或通过 CSS 变量自定义主题。

npm install sass -D

然后在 vite.config.js 中启用:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

export default defineConfig({
  css: {
    preprocessorOptions: {
      scss: {
        additionalData: `@use "@/styles/element-plus.scss" as *;`
      }
    }
  },
  plugins: [
    vue(),
    Components({
      resolvers: [ElementPlusResolver({ importStyle: 'sass' })],
    }),
  ],
})

Q3:如何实现 Element Plus 表单验证?

:使用 el-formvalidate 方法进行表单校验。

formRef.value.validate((valid) => {
  if (valid) {
    // 提交逻辑
  } else {
    return false
  }
})

Q4:如何国际化 Element Plus 组件?

:结合 dayjsi18n 插件设置语言包。

npm install dayjs vue-i18n
// main.ts
import { createI18n } from 'vue-i18n'
import zh from 'element-plus/es/locale/lang/zh-cn'
import en from 'element-plus/es/locale/lang/en'

const messages = {
  zh,
  en
}

const i18n = createI18n({
  legacy: false,
  locale: 'zh',
  fallbackLocale: 'zh',
  messages
})

const app = createApp(App)
app.use(i18n)
app.use(ElementPlus, { i18n: i18n.global })

🧾 六、总结:Element Plus 的核心优势

优势描述
🧱 组件丰富几乎涵盖所有中后台所需组件
🧊 支持暗黑模式更加现代化的视觉体验
📦 按需加载不影响性能,减少打包体积
🌐 国际化支持多语言轻松切换
🛠️ TypeScript 支持类型安全,提高开发效率

📚 七、参考资料


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值