Logo

Logo

ElementUI快速入门

Pastore Antonio
Pastore Antonio 2022年05月25日
1083 阅读 0 评论 约 10908 字 阅读约 22 分钟

本文主要从几个方面快速入门ElementUI

1、什么是ElementUI ? 掌握elementUI脚手架搭建

2、掌握elementUI的table组件的使用,实现列表功能

3、掌握elementUI的pagination组件的使用,实现分页功能

4、掌握elementUI的form相关组件的使用,实现条件查询功能

5、掌握elementUI的dialog组件和$message的使用,实现弹出窗口和消息提示功能

6、掌握elementUI的select组件的使用,实现下拉列表功能实现新增数据和修改数据的功能

7、掌握confirm的使用,实现询问框,实现删除功能

 

1、什么是ElementUI?

Element 饿了么前端出品的一套 基于 Vue 2.0 的桌面端组件库

官网: http://element.eleme.io/#/zh-CN

 

1.1、搭建elementUI脚手架(vue-admin-template)

# Clone project
git clone https://github.com/PanJiaChen/vue-admin-template.git

# Install dependencies
npm install

# Serve with hot reload at localhost:9528
npm run dev

# Build for production with minification
npm run build

# Build for production and view the bundle analyzer report
npm run build --report

在执行完npm run dev后发现浏览器自动打开了vue-admin-template登录页面,点击登录,此时模板页面就搭建好了。

打开文件夹vue-admin-template,主要的目录结构如下图所示:

 

1.2 项目初始化调整

1.2.1  关闭语法规范性检查

修改config/index.js ,将useEslint的值改为false。

此配置作用: 是否开启语法检查,语法检查是通过ESLint 来实现的。

我们现在科普一下,什么是ESLint : ESLint 是一个语法规则和代码风格的检查工具,可以用来保证写出语法正确、风格统一的代码。如果我们开启了Eslint , 也就意味着要接受它非常苛刻的语法检查,包括空格不能少些或多些,必须单引不能双引,语句后不可以写 分号等等,这些规则其实是可以设置的。作为初学者,最好先关闭这种校验,否则会浪费很多精力在语法的规范性上。如果以后做真正的企业级开发,建议开启。

 

1.2.2  国际化设置

打开main.js 找到这句代码

import locale from ‘element‐ui/lib/locale/lang/en’

我们将en修改为zn-CN
import locale from ‘element‐ui/lib/locale/lang/zh‐CN’

修改后组件都是按照中文的习惯展示

 

1.2.3  与easy-mock对接

(1)修改config下的dev.env.js中的BASE_API为easy-mock的Base URL

  ....
  BASE_API: '"http://10.211.5.3:7300/mock/5af314a4c612420d0d7650c7"',
  ....

修改后发现无法登录上vue-admin-templates,原因是修改了BASE_API,需要在自己的Easy-mock中修改验证

(2)easy-mock添加登陆认证模拟数据 地址: /user/login
提交方式:post
内容:

{
  "code": 20000,
  "data": {
    "roles": ["admin"],
    "role": ["admin"],
    "name": "admin",
    "avatar": "https://wpimg.wallstcn.com/f778738c‐e4f8‐4870‐b634‐56703b4acafe.gif"
  }
}

(3)添加返回用户信息url模拟数据 地址:/user/info
提交方式:get
内容:

{
  "code": 20000,
  "data": {
    "roles": ["admin"],
    "role": ["admin"],
    "name": "admin",
    "avatar": "https://wpimg.wallstcn.com/f778738c‐e4f8‐4870‐b634‐56703b4acafe.gif"
  }
}

 

此时又可以登录上vue-admin-template,且成功与自己的easy-mock对接上了。

 

2.elementUI的table组件,实现列表展示

(1)在src/api/下创建gathering.js,书写代码:

import request from '@/utils/request'
export default{
    getList(){
        return request(
            {
                url:'/gathering/gathering',
                method:'get'
            } 
        );
    }
} 

导入request模块实际上是对ajax的封装(在utils/request.js中),上述的url和method即为请求的url和method

(2)在views/table中创建 gathering.vue

vue主要分为视图区<template>、逻辑区/代码区<script>(用于控制视图区的显示)

<template>
    <el-table :data="list" border style="width: 100%">
    <el-table-column prop="id" label="活动ID" width="180">
    </el-table-column>
    <el-table-column prop="name" label="活动名称" width="180">
    </el-table-column>
    <el-table-column prop="sponsor" label="主办方" width="180">
    </el-table-column>
    <el-table-column prop="address" label="活动地址" width="180">
    </el-table-column>
    <el-table-column prop="starttime" label="开始日期" width="180">
    </el-table-column>
    <el-table-column prop="endtime" label="结束日期" width="180">
    </el-table-column>
  </el-table>
</template>

<script>
//将我们刚才书写的gathering.js导入到该vue中,并声明其作为变量gatheringApi
import gatheringApi from '@/api/gathering'
export default {
    data() {
    return {
      list: []
    }
  },
  created() {
    this.fetchData()
  },
  methods: {
    fetchData() {
      gatheringApi.getList().then(response => {
        this.list = response.data
      })
    }
  }
}
</script>

(3)修改router/index.js中的path和import(‘@/views/table/gathering’)  其中path为访问路径,import为views文件夹中的table文件夹中的gathering.vue文件

{
    path: '/gathering',
    component: Layout,
    children: [
      {
        path: 'index',
        name: 'Form',
        component: () => import('@/views/table/gathering'),
        meta: { title: '活动管理', icon: 'form' }
      }
    ]
  }

(4)reload工程 :   npm run dev

(5)plus:如果此时你在开发者工具中能正常接收数据,但是无法显示,考虑easy-mock中的接口设置,返回值是否为20000等。

{
    "code": 20000,
    "flag": true,
    "message": "@string",
    "data|10": [{
      "id": "@string",
      "name": "@cword(8,12)",
      "summary": "@cword(20,40)",
      "detail": "@cword(20,40)",
      "sponsor": "@string",
      "image": "@image",
      "starttime": "@date",
      "endtime": "@date",
      "address": "@county(true)",
      "enrolltime": "@date",
      "state": "@string",
      "city": "@string"
    }]
}

 

3.使用pagination实现分页

我们已经通过表格组件完成了列表的展示,接下来需要使用分页组件完成分页功能

一般对于分页,都需要前端传递给后端两个参数:①当前页码   ②每页显示条数

由于笔者项目中用到了Easy Mock,所以我们第一步应该修改Easy Mock中的接口,产生更真实的模拟数据

(1)修改接口/gathering/gathering/search/{page}/{size} method:POST

(2)在gathering.js中添加新方法search,page当前页码,size每页显示条数,searchMap查询条件

参考返回数据结构:

<script>
import gatheringApi from '@/api/gathering'
export default {
    data() {
    return {
      total: 0 ,       //总记录数
      list: [],
      currentPage: 1,  //初始值为1
      pageSize: 10,     //每页显示条数
      searchMap: {}     //查询条件
    }
  },
  created() {
    this.fetchData()
  },
  methods: {
    fetchData() {
      gatheringApi.search(this.currentPage,this.pageSize,this.searchMap).then(response => {
        this.list = response.data.rows
        this.total = response.data.total
      })
    }
  }
}
</script>

此时js部分(逻辑处理层)我们已经完成,参考官方文档完成分页组件UI层:

http://element-cn.eleme.io/#/zh-CN/component/pagination

plus:@代表调用的方法,当每页显示个数和当前页码改变时会调用方法fetchData,:name代表属性

  <el-pagination
      @size-change="fetchData"
      @current-change="fetchData"
      :current-page="currentPage"
      :page-sizes="[5, 10, 20]"
      :page-size="10"
      layout="total, sizes, prev, pager, next, jumper"
      :total="total">
  </el-pagination>

plus:如果加入该<el-pagination>到<template>中报错,考虑在<template>下添加一个<div>标签,因为<template>下只能有一个标签加入后即只有一个<div>标签,否则将存在<el-table>标签和<el-pagination>标签,故报错。

 

4. 使用分页+条件查询

需求:在分页列表的基础上实现条件查询功能【使用到了表单控件、文本输入控件、日期输入控件、行内表单等】

总体template代码:

<template>
  <div>
    <br/>
    <el-form :inline="true">
      <el-form-item label="活动名称">
        <el-input v-model="searchMap.name"></el-input>   
      </el-form-item>
      <el-form-item label="活动日期">
        <el-date-picker v-model="searchMap.starttime_1" type="date" placeholder="选择开始日期">
      </el-date-picker>
        <el-date-picker v-model="searchMap.starttime_2" type="date" placeholder="选择结束日期">
      </el-date-picker>
      </el-form-item>
      <el-button @click="fetchData()" type="primary">查询</el-button>
    </el-form>

    ......

  </div>
</template>

 

5-6. 弹出窗口、消息提示、select下拉框

需求:界面中加入”新增”按钮,点击弹出编辑窗口,点击“修改”按钮,关闭窗口并刷新表格,弹出提示(成功或失败)

涉及知识点:dialog组件、$message、switch开关、textarea文本域、form表单、select下拉框等

参考官方文档:http://element-cn.eleme.io/#/zh-CN/component/dialog      (如何调出窗口并关闭窗口)

plus:注意!需要在return内部声明一个实体对象,用于存储表单数据 ,如:renturn{ pojo:{} }

(省略了一部分代码)新增city.js,并导出(参考gathering.js)。在gathering.vue中导入city,并在打开视图时就加载城市:

created() {
    this.fetchData()
    cityApi.getList().then(response => {
      this.cityList = response.data
    })
  }

不要忘记在return中加入city这个实体对象,否则为空报错。如return{ cityList:[] }

<template>视图层代码:

<el-dialog title="编辑" :visible.sync="dialogFormVisible">
    <el-form :model="form" label-width="100px">
    <el-form-item label="活动名称" :label-width="formLabelWidth">
      <el-input v-model="pojo.name" placeholder="活动名称"></el-input>
    </el-form-item>
    <el-form-item label="基本地址" :label-width="formLabelWidth">
      <el-input v-model="pojo.address" placeholder="基本地址"></el-input>
    </el-form-item>
    <el-form-item label="开始日期" :label-width="formLabelWidth">
      <el-date-picker v-model="pojo.starttime" type="date" placeholder="选择开始日期">
      </el-date-picker>
    </el-form-item>
    <el-form-item label="截至日期" :label-width="formLabelWidth">
      <el-date-picker v-model="pojo.endtime" type="date" placeholder="选择截至日期">
      </el-date-picker>
    </el-form-item>
    <el-form-item label="报名截止" :label-width="formLabelWidth">
      <el-date-picker v-model="pojo.enrolltime" type="date" placeholder="选择截至日期">
      </el-date-picker>
    </el-form-item>
    <el-form-item label="活动详情" :label-width="formLabelWidth">
      <el-input v-model="pojo.detail" type="textarea" :rows="3" placeholder="请输入内容"></el-input>
    </el-form-item>
    <el-form-item label="选择城市">
      <el-select v-model="pojo.city" placeholder="请选择城市">
        <el-option v-for="item in cityList" :key="item.value" :label="item.name" :value="item.id">
        </el-option>
    </el-select>
    </el-form-item>
    <el-form-item label="是否可见">
       <el-switch v-model="pojo.status" active-value="1" inactive-value="0" ></el-switch>
    </el-form-item>
    <el-form-item>
       <el-button type="primary">保存</el-button>
       <el-button type="primary" @click="dialogFormVisible = false">关闭</el-button>
    </el-form-item>
  </el-form>
  </el-dialog>

当我们点击保存按钮的时候,则触发几个动作:①弹出消息提示框(消息内容来自于响应体中的message)  ②判断消息状态是否为true,为true则刷新列表(调用之前的刷新列表方法)  ③关闭窗口(设置dialogVisible = false),主要代码如下:

<template>
...
    <el-form-item>
       <el-button type="primary" @click="handlerSave()">保存</el-button>
       <el-button type="primary" @click="dialogFormVisible = false">关闭</el-button>
    </el-form-item>
...
</template>

<script>
    ...
    methods:{
        handlerSave(){
          gatheringApi.save(this.pojo).then(response => {
          alert(response.message)
          if(response.flag){         //如果成功
          this.fetchData();        //刷新列表
        }
      })
      this.dialogFormVisible=false //关闭窗口
    }
    }
    ...
</script>

 

7、在列表显示页面右侧执行修改操作

需求:在表格的操作列增加”修改”按钮,点击修改按钮弹出窗口并显示数据,点击保存按钮保存 修改并刷新表格。

需求分析:在点击修改按钮时候,首先需要打开窗口(修改dialogVisible = true),其次获取点击的数据行id,根据该id查询数据并回显,在点击保存按钮时候,执行上面所讲的保存操作。

由于我们使用Easy-Mock模拟数据,我们首先需要修改根据id查询数据的接口

(1)修改easymock接口/gathering/gathering/{id} (GET)

(2)修改src/api/gathering.js,增加方法定义

findById(id) {
   return request({
      url: `/gathering/gathering/${id}`,
      method: 'get'
   })
}

(3)修改src/views/table/gathering.vue的js脚本部分,新增handleEdit()方法

handleEdit(id){
   this.dialogFormVisible=true  //打开窗口
    gatheringApi.findById(id).then(response=>{
      if(response.flag){
        this.pojo=response.data
      }
    })
}

(4)在表格table中增加模板列 ,模板列中防止修改按钮,调用handleEdit方法

<el-table-column
      label="操作"
      width="100">
      <template slot-scope="scope">
        <el-button @click="handleEdit(scope.row.id)" type="text" size="small">修改</el-button>
      </template>
</el-table-column>

fixed=”right”的作用是定义此列为右固定列slot-scope用于指定当前行的上下文。

使用scope.row可以获取行对象,此处我们需要获得当前行的id,故使用scope.row.id

 

查看完整代码

橙子主题打折出售

其实我不卖,主要是这里是放广告的,所以就放了一个
毕竟主题都没做完,卖了也是坑.

购买它

附件下载

共 6 个文件
20190102223746272
PNG 148.5 KB
20190103111620289
PNG 319.6 KB
20190103205618851
PNG 191.9 KB
20190103212555236
PNG 241.9 KB
20190103220833291
PNG 103.8 KB
20190103231638415
PNG 90.4 KB
部分文章可能存在转载,如果涉及到侵权,请联系删除文章。

探索AIGC相关的精彩内容,共 15 篇文章

Azure AI 服务之语音识别

简介 Azure AI 服务中的语音识别 API 是微软提供的一项先进技术,旨在帮助开发者轻松实现语 ... ElementUI快速入门

2026-02-17 · Xzavier Aaron
MCP | 一文详解什么是 MCP以及 MCP 可以做什么

一、什么是 MCP MCP(Model Context Protocol)是一个专为大型语言模型(L ... ElementUI快速入门

2026-02-14 · Shen, Luke
你的工作流程,值得一个“全自动数字分身”:录制、截图、成文,一气呵成

一、一句话认识 TestFlow Recorder 在数字化工作环境中,如何准确记录操作步骤并生成清 ... ElementUI快速入门

2026-02-14 · Xzavier Aaron
Flowise 前端框架配置指南

用户需求 问题:有没有适合配置 Flowise 的前端框架? 目标:寻找类似 Open WebUI ... ElementUI快速入门

2026-02-14 · Xzavier Aaron