当前位置: 首页 > news >正文

【JavaWeb学习Day25】

Web前端实战

ElementPlus

什么是ElementPlus

ElementPlus:是饿了么团队研发的,基于Vue3,面向设计师和开发者的组件库。

组件:组成网页的部件,例如超链接、按钮、图片、表格、表单、分页条等等。

官网:一个 Vue 3 UI 框架 | Element Plus

快速入门

准备工作:

1.创建vue项目

2.参照官方文档,安装Element Plus组件库(在当前工程的目录下):npm install element-plus@2.2.4 --save

3.main.js中引入Element Plus组件库(参照官方文档)

import { createApp } from 'vue'
//引入element
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import App from './App.vue'
​
​
createApp(App).use(ElementPlus).mount('#app')

制作组件:访问Element官方文档,复制组件代码,调整。

常见组件

表格组件:

用于展示多条结构类似的数据,可对数据进行排序、筛选、对比或其他自定义操作。

<script setup>
const tableData = [
  {
    date: '2016-05-03',
    name: 'Tom',
    address: 'No. 189, Grove St, Los Angeles',
  },
  {
    date: '2016-05-02',
    name: 'Tom',
    address: 'No. 189, Grove St, Los Angeles',
  },
  {
    date: '2016-05-04',
    name: 'Tom',
    address: 'No. 189, Grove St, Los Angeles',
  },
  {
    date: '2016-05-01',
    name: 'Tom',
    address: 'No. 189, Grove St, Los Angeles',
  },
]
</script>
​
<template>  
<div class="mb-4">
  <el-table :data="tableData" border style="width: 100%">
    <el-table-column prop="date" label="Date" width="180" />
    <el-table-column prop="name" label="Name" width="180" />
    <el-table-column prop="address" label="Address" />
  </el-table>
  </div>
</template>

表格组件使用的关键点在于清楚表格中绑定的数据data,以及每一列要展示的属性信息。项目开发中的数据应该是Ajax异步请求服务端,服务端返回。

分页条组件:

当数据量过多时,使用分页操作分解数据。

默认Element Plus的组件是英文的,如果希望使用中文语言,可以做如下配置:

import zhCn from 'element-plus/es/locale/lang/zh-cn'
createApp(App).use(ElementPlus,{locale:zhCn}).mount('#app')
<script setup>
import { ref } from 'vue';// 导入 ref 函数
const currentPage4 = ref(1);// 定义当前页码
const size = ref('default');// 定义分页大小
const background = ref(true);// 定义是否显示背景  
</script>
<template>  
<div>
    <el-pagination
      v-model:current-page="currentPage4"
      v-model:page-size="pageSize4"
      :page-sizes="[100, 200, 300, 400]"
      :disabled="disabled"
      :background="background"
      layout="total, sizes, prev, pager, next, jumper"
      :total="400"
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
    />
  </div>
</template>
对话框组件:

在保留当前页面状态的情况下,告知用户并承载相关操作。

通过model-value/v-model给定的boolean值,来控制Dialog的显示和隐藏。

<script setup>
const dialogTableVisible = ref(false);// 定义对话框是否可见
</script>
<template>  
  <div class="mb-4">
    <el-button plain @click="dialogTableVisible = true">
    Open a Table nested Dialog
  </el-button>
  <el-dialog v-model="dialogTableVisible" title="Shipping address" width="800">
    <el-table :data="tableData">
      <el-table-column property="date" label="Date" width="150" />
      <el-table-column property="name" label="Name" width="200" />
      <el-table-column property="address" label="Address" />
    </el-table>
  </el-dialog>
  </div>
</template>
表单组件:

Form 表单:由输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据。

表单在我们前端的开发中使用的还是比较多的,接下来我们学习这个组件,与之前的流程一样,我们首先需要在ElementPlus的官方找到对应的组件示例

表单项数据采集:v-model数据绑定

表单数据提交:事件绑定

<!-- Form 表单 -->
  <el-form :inline="true" :model="formInline" class="demo-form-inline">
    <el-form-item label="Approved by">
      <el-input v-model="formInline.user" placeholder="Approved by" clearable />
    </el-form-item>
​
    <el-form-item label="Activity zone">
      <el-select v-model="formInline.region" placeholder="Activity zone" clearable>
        <el-option label="Zone one" value="shanghai" />
        <el-option label="Zone two" value="beijing" />
      </el-select>
    </el-form-item>
​
    <el-form-item label="Activity time">
      <el-date-picker v-model="formInline.date" type="date" placeholder="Pick a date" clearable/>
    </el-form-item>
    
    <el-form-item>
      <el-button type="primary" @click="onSubmit">Query</el-button>
    </el-form-item>
  </el-form>

案例

需求:基于ElementPlus组件库制作如下页面,并异步获取数据,完成页面展示。

1). 准备工作

由于在案例中,我们需要在vue项目中使用Axios,需要安装axios,需要在当前项目的目录下执行如下命令:

npm install axios

2). 编码实现

views目录下,再定义一个文件 EmpList.vue,具体代码实现如下:

<script setup>
import { ref, onMounted } from 'vue'
import axios from 'axios'
​
const searchEmp = ref({
  name: '',
  gender: '',
  job: '',
})
​
onMounted(() => {
  search();
})
​
const search = async () => {
  const url = `https://web-server.itheima.net/emps/list?name=${searchEmp.value.name}&gender=${searchEmp.value.gender}&job=${searchEmp.value.job}`
  const result = await axios.get(url)
  tableData.value = result.data.data
}
​
const clear = () => {
  searchEmp.value = { name: '', gender: '', job: '' }
  search();
}
​
let tableData = ref([])
</script>
​
<template>
  <div id="center">
    <el-form :inline="true" :model="searchEmp" class="demo-form-inline">
      <el-form-item label="姓名">
        <el-input v-model="searchEmp.name" placeholder="请输入姓名" clearable />
      </el-form-item>
      <el-form-item label="性别">
        <el-select v-model="searchEmp.gender" placeholder="请选择" clearable>
          <el-option label="男" value="1" />
          <el-option label="女" value="2" />
        </el-select>
      </el-form-item>
      <el-form-item label="职位">
        <el-select v-model="searchEmp.job" placeholder="请选择" clearable>
          <el-option label="班主任" value="1" />
          <el-option label="讲师" value="2" />
          <el-option label="咨询师" value="3" />
        </el-select>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="search">查询</el-button>
        <el-button type="primary" @click="clear">清空</el-button>
      </el-form-item>
    </el-form>
    <br>
​
    <!-- 表格 -->
    <el-table :data="tableData" border style="width: 100%; ">
      <el-table-column prop="id" label="ID" width="80" align="center" />
      <el-table-column prop="name" label="姓名" width="100" align="center" />
      <el-table-column label="头像" width="120" align="center">
        <template #default="scope">
          <img :src="scope.row.image" width="50">
        </template>
      </el-table-column>
      <el-table-column prop="gender" label="性别" width="120" align="center">
        <template #default="scope">
          {{ scope.row.gender == 1 ? '男' : '女' }}
        </template>
      </el-table-column>
      <el-table-column label="职位" width="180" align="center">
        <template #default="scope">
          <span v-if="scope.row.job == 1">班主任</span>
          <span v-else-if="scope.row.job == 2">讲师</span>
          <span v-else-if="scope.row.job == 3">咨询师</span>
          <span v-else>其他</span>
        </template>
      </el-table-column>
      <el-table-column prop="entrydate" label="入职日期" width="180" align="center" />
      <el-table-column prop="updatetime" label="更新时间" align="center" />
    </el-table>
  </div>
</template>
​
<style scoped>
#center {
  width: 70%;
  margin: auto;
  margin-top: 100px;
}
</style>
在 App.vue 中引入 EmpList.vue 文件

<script setup>
  import EmpList from './views/EmpList.vue'
</script>
​
<template>
  <EmpList></EmpList>
</template>
​
<style scoped>
​
</style>

3). 打开浏览器,查看页面效果

相关文章:

  • Java 大视界 -- Java 大数据在智能安防视频摘要与检索技术中的应用(128)
  • 1.8 双指针专题:四数之和
  • 销售易CRM:赋能企业销售与客户管理的数字化升级
  • 小凯的疑惑(数论 )
  • LeetCode-122. 买卖股票的最佳时机 II
  • latex问题汇总
  • neo4j图数据库
  • 轻量级模块化前端框架:快速构建强大的Web界面
  • C++- 基于多设计模式下的同步异步日志系统
  • 交换机、路由器、网关、MAC地址——从入门到实战
  • 地基注解@Controller和@RestController区别
  • shiro反序列化漏洞-简述
  • 机试准备第15天
  • 办公常用自动化工具
  • 西瓜书简单笔记
  • 操作系统学习笔记-进程调度篇
  • 在线Doc/Docx转换为PDF格式 超快速转换的一款办公软件 文档快速转换 在线转换免费转换办公软件
  • STM32步进电机S型与T型加减速算法
  • 10进制转换成2进制
  • 编写Dockerfile制作tomcat镜像,生成镜像名为tomcat:v1,并推送到私有仓库。
  • 上海制造佳品汇大阪站即将启幕,泡泡玛特领潮出海
  • 端午假期购票日历发布,今日可购买5月29日火车票
  • 微软将裁员3%,减少管理层
  • 专访|导演刘江:给谍战题材注入现实主义的魂
  • 苹果或将于2027年推出由玻璃制成的曲面iPhone
  • 教育部基础教育教指委:小学阶段禁止学生独自使用开放式内容生成功能