Element UI使用指南 - Vue组件库最佳实践

Element UI 组件库使用指南

TIP

Element UI 是饿了么前端团队开发的 Vue 组件库,广泛应用于后台管理系统开发。


安装配置

npm 安装

# Vue 2 版本
npm install element-ui

# Vue 3 版本使用 Element Plus
npm install element-plus

完整引入

// main.js
import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'

Vue.use(ElementUI)

按需引入(推荐)

npm install babel-plugin-component -D
// babel.config.js
module.exports = {
  plugins: [
    ["component", {
      "libraryName": "element-ui",
      "styleLibraryName": "theme-chalk"
    }]
  ]
}
// 按需引入组件
import { Button, Table, Form } from 'element-ui'
Vue.use(Button)
Vue.use(Table)
Vue.use(Form)

常用组件

表格 Table

<template>
  <el-table :data="tableData" style="width: 100%">
    <el-table-column prop="date" label="日期" width="180" />
    <el-table-column prop="name" label="姓名" width="180" />
    <el-table-column prop="address" label="地址" />
    <el-table-column label="操作" width="200">
      <template slot-scope="scope">
        <el-button size="mini" @click="handleEdit(scope.row)">编辑</el-button>
        <el-button size="mini" type="danger" @click="handleDelete(scope.row)">删除</el-button>
      </template>
    </el-table-column>
  </el-table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        { date: '2025-01-15', name: '张三', address: '北京市' },
        { date: '2025-01-14', name: '李四', address: '上海市' }
      ]
    }
  },
  methods: {
    handleEdit(row) {
      console.log('编辑', row)
    },
    handleDelete(row) {
      this.$confirm('确定删除吗?', '提示', {
        type: 'warning'
      }).then(() => {
        console.log('删除', row)
      })
    }
  }
}
</script>

表单 Form

<template>
  <el-form :model="form" :rules="rules" ref="formRef" label-width="80px">
    <el-form-item label="用户名" prop="username">
      <el-input v-model="form.username" placeholder="请输入用户名" />
    </el-form-item>
    <el-form-item label="密码" prop="password">
      <el-input v-model="form.password" type="password" placeholder="请输入密码" />
    </el-form-item>
    <el-form-item label="邮箱" prop="email">
      <el-input v-model="form.email" placeholder="请输入邮箱" />
    </el-form-item>
    <el-form-item>
      <el-button type="primary" @click="submitForm">提交</el-button>
      <el-button @click="resetForm">重置</el-button>
    </el-form-item>
  </el-form>
</template>

<script>
export default {
  data() {
    return {
      form: {
        username: '',
        password: '',
        email: ''
      },
      rules: {
        username: [
          { required: true, message: '请输入用户名', trigger: 'blur' },
          { min: 3, max: 20, message: '长度在 3 到 20 个字符', trigger: 'blur' }
        ],
        password: [
          { required: true, message: '请输入密码', trigger: 'blur' }
        ],
        email: [
          { required: true, message: '请输入邮箱', trigger: 'blur' },
          { type: 'email', message: '请输入正确的邮箱格式', trigger: 'blur' }
        ]
      }
    }
  },
  methods: {
    submitForm() {
      this.$refs.formRef.validate(valid => {
        if (valid) {
          console.log('提交成功', this.form)
        }
      })
    },
    resetForm() {
      this.$refs.formRef.resetFields()
    }
  }
}
</script>

对话框 Dialog

<template>
  <div>
    <el-button @click="dialogVisible = true">打开对话框</el-button>
    
    <el-dialog title="编辑用户" :visible.sync="dialogVisible" width="500px">
      <el-form :model="form" label-width="80px">
        <el-form-item label="姓名">
          <el-input v-model="form.name" />
        </el-form-item>
        <el-form-item label="电话">
          <el-input v-model="form.phone" />
        </el-form-item>
      </el-form>
      <span slot="footer">
        <el-button @click="dialogVisible = false">取消</el-button>
        <el-button type="primary" @click="handleSave">保存</el-button>
      </span>
    </el-dialog>
  </div>
</template>

实用技巧

全局配置

// 设置全局配置
Vue.use(ElementUI, {
  size: 'small',  // 组件默认尺寸
  zIndex: 3000    // 弹窗层级
})

消息提示

// 成功提示
this.$message.success('操作成功')

// 错误提示
this.$message.error('操作失败')

// 确认框
this.$confirm('确定删除吗?', '提示', {
  confirmButtonText: '确定',
  cancelButtonText: '取消',
  type: 'warning'
}).then(() => {
  // 确认操作
}).catch(() => {
  // 取消操作
})

表格分页

<template>
  <div>
    <el-table :data="currentPageData">
      <!-- 表格列 -->
    </el-table>
    
    <el-pagination
      @current-change="handlePageChange"
      :current-page="currentPage"
      :page-size="pageSize"
      :total="total"
      layout="total, prev, pager, next"
    />
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentPage: 1,
      pageSize: 10,
      total: 100
    }
  },
  methods: {
    handlePageChange(page) {
      this.currentPage = page
      this.fetchData()
    }
  }
}
</script>

相关链接

如有问题,欢迎在评论区留言!

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8