Skip to content

Vue UI 组件库

Vue 生态系统拥有丰富的 UI 组件库,从企业级到移动端,满足各种项目需求。

🎨 主流 Vue UI 库

Element Plus

最受欢迎的 Vue 3 企业级 UI 库

  • 特点:组件丰富、文档完善、企业级设计
  • 适用场景:后台管理系统、企业应用
  • 安装npm install element-plus
vue
<template>
  <el-button type="primary">主要按钮</el-button>
  <el-button type="success">成功按钮</el-button>
  <el-button type="info">信息按钮</el-button>
</template>

<script setup>
import { ElButton } from 'element-plus'
</script>

Vuetify

Material Design 风格的 Vue UI 框架

  • 特点:Material Design、响应式、主题定制
  • 适用场景:现代 Web 应用、移动端适配
  • 安装npm install vuetify

Quasar

全平台 Vue 框架

  • 特点:一套代码多端运行、性能优秀
  • 适用场景:跨平台应用、PWA、移动应用
  • 支持平台:Web、移动端、桌面端

Ant Design Vue

企业级 UI 设计语言

  • 特点:设计规范严谨、组件质量高
  • 适用场景:企业级应用、数据密集型界面
  • 安装npm install ant-design-vue

📱 移动端 UI 库

Vant

轻量、可靠的移动端组件库

vue
<template>
  <van-button type="primary">主要按钮</van-button>
  <van-cell-group>
    <van-cell title="单元格" value="内容" />
  </van-cell-group>
</template>

<script setup>
import { Button as VanButton, Cell as VanCell, CellGroup as VanCellGroup } from 'vant'
</script>

NutUI

京东风格的移动端组件库

  • 特点:京东设计规范、支持多端
  • 适用场景:电商应用、移动端项目

🛠️ 组件库选择指南

项目类型对比

项目类型推荐组件库理由
后台管理Element Plus组件丰富、表格表单强大
企业应用Ant Design Vue设计规范、质量稳定
现代WebVuetifyMaterial Design、美观
移动端H5Vant轻量、移动优化
跨平台Quasar一套代码多端运行

技术特性对比

特性Element PlusVuetifyAnt Design VueQuasar
Vue 3 支持
TypeScript
主题定制
国际化
移动端适配⚠️⚠️
SSR 支持

🎯 快速上手

Element Plus 完整示例

vue
<template>
  <div class="demo-container">
    <!-- 表单示例 -->
    <el-form :model="form" label-width="120px">
      <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-item>
        <el-button type="primary" @click="onSubmit">提交</el-button>
        <el-button @click="onReset">重置</el-button>
      </el-form-item>
    </el-form>

    <!-- 表格示例 -->
    <el-table :data="tableData" style="width: 100%">
      <el-table-column prop="name" label="姓名" width="180" />
      <el-table-column prop="age" label="年龄" width="180" />
      <el-table-column prop="address" label="地址" />
    </el-table>
  </div>
</template>

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

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

const tableData = [
  { name: '张三', age: 25, address: '北京市朝阳区' },
  { name: '李四', age: 30, address: '上海市浦东新区' }
]

const onSubmit = () => {
  console.log('提交表单:', form)
}

const onReset = () => {
  form.username = ''
  form.password = ''
}
</script>

主题定制

scss
// 自定义主题变量
:root {
  --el-color-primary: #409eff;
  --el-color-success: #67c23a;
  --el-color-warning: #e6a23c;
  --el-color-danger: #f56c6c;
  --el-color-info: #909399;
}

// 或使用 SCSS 变量
$--color-primary: #409eff;
$--color-success: #67c23a;

@import 'element-plus/theme-chalk/index.scss';

🔧 最佳实践

按需引入

javascript
// vite.config.js
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()],
    }),
  ],
})

全局配置

javascript
// main.js
import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'

const app = createApp(App)

app.use(ElementPlus, {
  locale: zhCn,
})

组件封装

vue
<!-- 封装业务组件 -->
<template>
  <el-dialog
    v-model="visible"
    :title="title"
    width="500px"
    @close="handleClose"
  >
    <slot />
    <template #footer>
      <el-button @click="handleCancel">取消</el-button>
      <el-button type="primary" @click="handleConfirm">确定</el-button>
    </template>
  </el-dialog>
</template>

<script setup>
defineProps({
  title: String,
  visible: Boolean
})

const emit = defineEmits(['update:visible', 'confirm', 'cancel'])

const handleClose = () => {
  emit('update:visible', false)
}

const handleConfirm = () => {
  emit('confirm')
}

const handleCancel = () => {
  emit('cancel')
  handleClose()
}
</script>

📚 学习资源

官方文档

设计资源

  • Element Plus 设计规范
  • Material Design 指南
  • Ant Design 设计语言

社区资源

  • GitHub 仓库和示例
  • Vue 社区讨论
  • 组件库生态插件

选择合适的 UI 组件库能够大大提升开发效率,建议根据项目需求和团队技术栈来选择!

🎨 开始构建美观的 Vue 应用吧!