02 elementplus前端增删改查【小白入门SpringBoot+Vue3】

news2024/11/15 4:21:22

视频教程来源于 B站青戈
https://www.bilibili.com/video/BV1H14y1S7YV

只用elementplus,学点增删改查,还没有于后端连接起来,具体在下一篇

搭建一个小页面,显示数据

补充:webstorm格式化代码,修改了快捷键 Alt + F

利用elementplus官网的组件,来到src/views/HomeView.vue ,先搭建一个小按钮,使用el-button标签,然后加一个表格标签。这是静态页面

<template>
  <div class="box">
    <el-button class="button" type="primary" round>按钮</el-button>
    <el-table :data="tableData" 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>

<style>
.box{
  margin: 20px;
}
</style>

紧接着,在表格里面加点数据,官网里面就有的

<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>

讲讲,为什么上面这样子加入数据,能完全对应到表格中。

<el-table-column prop="date"/> 表格每列数据,有个prop属性,其属性值是date,然后加入数据的时候,date: '2016-05-02' ,里面的date就是属性值,这样就能把’2016-05-02’,对应放到 prop="date"这一列。其他列同理。


<el-table-column label="Date"/> ,label=“Date”,表示这一列,显示给用户看的列名为Date ,也可以改成中文“日期”


<el-table-column width="180"/> ,width=“180”,表示这一列的宽度为180 ,可以根据需要更改。若删除width=“180”,那么列宽由系统自适应。


增加数据

预想,点击按钮,增加数据,有个弹窗,让用户填写要增加的数据。

弹窗,用Dialog 组件,如下图,点击红框处,会弹出一个表单,是我们想要的内容a6

在这里插入图片描述

然后就复制对应代码,放到src/views/HomeView.vue

  <!-- Form -->
  <el-dialog v-model="dialogFormVisible" title="Shipping address">
    <el-form :model="form">
      <el-form-item label="Promotion name" :label-width="formLabelWidth">
        <el-input v-model="form.name" autocomplete="off" />
      </el-form-item>
      <el-form-item label="Zones" :label-width="formLabelWidth">
        <el-select v-model="form.region" placeholder="Please select a zone">
          <el-option label="Zone No.1" value="shanghai" />
          <el-option label="Zone No.2" value="beijing" />
        </el-select>
      </el-form-item>
    </el-form>
    <template #footer>
      <span class="dialog-footer">
        <el-button @click="dialogFormVisible = false">Cancel</el-button>
        <el-button type="primary" @click="dialogFormVisible = false">
          Confirm
        </el-button>
      </span>
    </template>
  </el-dialog>    

上面只是复制粘贴,得到静态页面,真正实现点击弹窗表单,还需要在js写代码。
elementplus官网也有对应的js的代码,可以参考写进去,相应的reactive, ref也要导入才能正常使用。

  • ref表示数据是响应式的,若有更改,会及时改变。但凡用到ref类型的数据值,必须加value

  • dialogFormVisible 的值是布尔值,true或false

import {reactive, ref} from "vue";
const dialogFormVisible = ref(false)      //表单是否弹出来
const form = reactive({})  //表单数据

接着,弹窗出来的表单,需根据实际情况,进行相应更改。

  • 对照官网的弹窗表单效果图,可发现,label="Promotion name",label的值,对应弹窗表单的左边文本;
  • 于是,可以对照上面表格的的列信息,修改弹窗表单的左边文本。
  • 相应地,label-width表示表单左边文本的宽度,文本宽度可以统一写在上一级标签元素,即<el-form :model="form" label-width="100px">
 原本
<el-form :model="form" >
 <el-form-item label="Promotion name" :label-width="formLabelWidth">
  <el-input v-model="form.name" autocomplete="off"/>
 <el-form-item>
      
修改后
<el-form :model="form" label-width="80px" style="padding-right: 40px">
 <el-form-item label="日期">
  <el-input v-model="form.date" autocomplete="off"/>
 <el-form-item>
  • title=“Shipping address” ,title对应弹窗的标题文本们可以按需修改,即title=“信息”
原本
<el-dialog v-model="dialogFormVisible" title="Shipping address">
    
修改
<el-dialog v-model="dialogFormVisible" title="信息">
  • 弹窗表单的按钮文本,默认是英文"Cancel",修改为中文“取消” 。Confirm翻译为“确认”
原本
<el-button @click="dialogFormVisible = false">Cancel</el-button>

修改
<el-button @click="dialogFormVisible = false">取消</el-button>

如下图可以明显看出修改的属性值,在弹窗显示中做出了相应改变。

在这里插入图片描述


弹窗的表单静态页面信息编辑好了,还需要把点击”增加数据“按钮,出来弹窗的功能做好,修改按钮的代码如下。

原始
<el-button class="button" type="primary" round >按钮</el-button>

修改
<el-button class="button" type="primary" round @click="dialogFormVisible=true">新增数据</el-button>

下个功能。

弹出表单窗口,填写好数据,点击”确认“按钮后,需要把数据插入到表格中。那么在“确认”按钮中,加入监听函数。

原始的
<el-button type="primary" @click="dialogFormVisible = false">确认</el-button>

修改后
<el-button type="primary" @click="save">确认</el-button>

相应地,要把save函数具体实现什么功能的代码写到js。

tableData.push()函数可以把数据插入到表格末尾(补充,tableData名字来源于 <el-table :data="tableData"> ,这表格的数据绑定在tableData上)。

但是push函数插入的数据类型要求一致,tableData此时是对象类型数据,而我们的from表单数据是reactive类型,类型不匹配。

为了保持类型一致,必须改变其中一个类型。所以改变tableData的类型,改为reactive响应式数据。

<script setup>
const tableData = reactive([
  {
    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',
  },

])

const save = ()=>{
  // 向表格添加数据
  tableData.push(form);
  // 关闭弹窗
  dialogFormVisible.value = true; 
}

</script>

发现了问题。

关闭弹窗后,再打开,仍然保留上次输入的数据,这样不行。每次打开弹窗,输入框的数据需要保持清空。

为了实现这个功能,需要增加一个函数。

原来
<el-button class="button" type="primary" round @click="dialogFormVisible=true">新增数据</el-button>

修改
<el-button class="button" type="primary" round @click="handleAdd()">新增数据</el-button>

handleAdd()函数对应的js代码

// form改成let类型,是因为const数据原则上不可更改,但是let可以
let form = reactive({})

const handleAdd = ()=>{
  // 打开弹窗
  dialogFormVisible.value=true;
 //  清空数据。这样子不会指向上次的遗留数据 ,还会清空上次遗留的数据。
  form = reactive({})
}

编辑、删除数据

在页面上,增加“编辑”、“删除”。去elementplus官网寻找合适的样式组件,如下图,看中了右边红色框中的样式

在这里插入图片描述

复制对应代码,并适当修改。

补充:

  • 在Vue3中,#default="scope"是一种用于处理列表渲染的语法。它允许在父组件中定义一个插槽,并通过子组件将数据传递给插槽。这样就可以在父组件中使用子组件的数据,并根据需要进行渲染。
  • scope.row→拿到每一行的数据
  • scope.$index→拿到每一行的index
  • @click.prevent函数会阻止触发dom的原始事件,而去执行特定的事件
原始
<el-table-column fixed="right" label="Operations" width="120">
   <template #default>
     <el-button link type="primary" size="small" @click="handleClick">Detail</el-button>
     <el-button link type="primary" size="small">Edit</el-button>
   </template>
 </el-table-column>

修改
<el-table-column fixed="right" label="操作" width="120">
  <template #default="scope">
    <el-button link type="primary" size="small" @click="handleClick(scope.row)">修改</el-button>
   <el-button link type="danger" size="small" @click.prevent="remove(scope.$index)">删除</el-button>
  </template>
</el-table-column>

修改细节如下;

  • <el-table-column label="Operations" > , 新增列,其列名为“操作”,故修改label=“操作”
  • <template #default> ,为了让列表的数据可以传递 ,故#default=“scope”
  • <el-button>Detail</el-button> ,按钮名字分别改为“修改”和“删除”。故<el-button>修改</el-button>
  • @click=“handleClick” ,为了让”修改“按钮和”删除“按钮实现相应的功能,需要添加对应参数,正好利用上#default="scope"的功能。故@click=“handleClick(scope.row)”,以及,@click.prevent=“remove(scope.$index)”
  • <el-button link type="primary"> ,”删除“按钮的样式,为了区分+不轻易删除,故改为醒目的样式,故type="danger">

页面效果如下
在这里插入图片描述

静态页面搭建好了,要把涉及到的函数实现。

先实现删除操作,其实elementplus官网有删除操作的js代码,可以复制过来修改。修改好后,删除操作就实现了。

原始(index: number  这个是typesccript语法,number表示参数的类型)
const deleteRow = (index: number) => {
  tableData.value.splice(index, 1)
}

修改
const remove = (index) => {
   //splice函数 从index的位置开始,删除一行  。 删掉value,是因为tableData数据现在是reactive类型
  tableData.splice(index, 1)
}

接下来搞编辑操作。

const handleEdit = (row)=>{
  // 先把这行数据放进弹出表单里
  form = reactive(row)
  // 再打开表单
  dialogFormVisible.value =true
}

上面的代码已经能实现编辑数据了,但是有一个缺点。就是打开表单窗口编辑的时候,表格对应这一行的数据也立马改变。

这样不对,应该是,提交确认按钮后,修改对应这一行的数据。

所以,还要修改代码。

可以先创建一个空对象,把这行对应的数据存储在这个空对象里面,等确认编辑好后,再把编辑好的数据放进这一行。

与此同时,这个函数还需要一个参数scope.$index ,新增一个变量globaIndex。具体代码修改如下

<el-button link type="primary" size="small" @click="handleEdit(scope.row , scope.$index)">修改</el-button>

let globalIndex = ref(-1) //全局变量

const save = () => {
  if (globalIndex.value > -1) { //编辑数据 。保存表格中,某行编辑好的数据
    tableData[globalIndex.value] = form;
    globalIndex.value = -1
  } e             lse { //新增数据
    // 向表格添加数据
    tableData.push(form);
  }
  // 关闭弹窗
  dialogFormVisible.value = false;
}

const handleEdit = (row, index) => {
  //创建一个空对象,把这行的的数据存储在这个空对象里面,等确认编辑好后,再改变表格对应这一行的数据。
  const newObj = Object.assign({}, row)
  // 把这行数据放进准备弹出表单里
  form = reactive(newObj)
  globalIndex.value = index;
  // 再打开弹出表单
  dialogFormVisible.value = true
}

重点!!!!let globalIndex = ref(-1) //全局变量,但凡用到globalIndex的值的时候,必须加上.vaalue


查询数据

在表格上面,加入一个输入框和一盒查询按钮。

刚开始这是静态页面,但是需要加入查询功能。

补充:

  • ref 和reactive都是响应式类型,但是ref适用于单一数字、字符串、布尔值等简单数据,reactive更适合对象、数组等复杂数据
  • clearable 属性用于在输入框内末尾添加删除图标,可用于清空当前输入框内容
  • v-model=“input” ,Vue中使用v-model指令来实现表单元素和数据的双向绑定。监听用户的输入,然后更新数据
原来
<el-input placeholder="Please input" />
<el-button class="button" type="primary">按钮</el-button>
修改
<el-input v-model="input" placeholder="请输入" style="width: 250px" clearable/>
<el-button class="button" type="primary" round @click="search" style="margin: 5px">查询数据</el-button>

相应地,实现search函数的js代码.

tableData从reactive类型,改会ref类型。因为reactive类型很难用filter函数查出的是代理Proxy数据,没办法将筛选结果赋值给tableData。所以还是改回ref,注意,涉及到tableData的时候,就要加上.value

let input_search = ref('') //初始值为空
let tableData = ref([
  {
    date: '2017-05-03',
    name: 'Jerry',
    address: 'No. 189, Grove St, Los Angeles',
  },
  {
    date: '2016-05-02',
    name: 'Tom',
    address: 'No. 189, Grove St, Los Angeles',
  },
])

const search = ()=>{
  tableData.value  =tableData.value.filter(v=>v.name.includes(input.value))
}

以上是查询方法实现的一种,还有另一种,就是新建一个reactive类型的变量,然后把tableData包裹起来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1228519.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二叉树oj题集(LeetCode)

100. 相同的树 关于树的递归问题&#xff0c;永远考虑两方面&#xff1a;返回条件和子问题 先考虑返回条件&#xff0c;如果当前的根节点不相同&#xff0c;那就返回false&#xff08;注意&#xff0c;不要判断相等时返回什么&#xff0c;因为当前相等并不能说明后面节点相等…

记录:RK3568显示异常。

最近调一个RK3568的新板子&#xff0c;板子其它接口功能都调试ok。可唯独在适配显示时发现&#xff0c;HDMI和MIPI显示均出现异常。当系统启动要进入桌面时候内核就开始报错。 因为这套源码之前在其它的板子上适配过&#xff0c;所以第一反应就是硬件问题或者是那个电压没配置…

5 redis的GEO操作

一、GEO Redis 3.2版本提供了GEO(地理信息定位)功能&#xff0c;支持存储地理位置信息用来实现诸如附近位置、摇一摇这类依赖于地理位置信息的功能。 有效纬度从-85.05112878度到85.05112878度 注意&#xff1a;当坐标位置超出上述指定范围时&#xff0c;将会返回一个错误。 …

音视频技术在手机上的应用与挑战

// 编者按&#xff1a;随着手机相机功能日益强大&#xff0c;4k&#xff0c;8k&#xff0c;各类特色短视频的拍摄&#xff0c;编辑、播放需求日益增长&#xff0c;短视频应用的火爆也对当前的手机音视频技术提出了更高的要求&#xff0c;如何更好地提高用户体验成为了行业共同…

Linux——编译器gcc/g++、调试器gdb以及自动化构建工具makefilemake详解

编译器—gcc/g、调试器—gdb以及自动化构建工具—makefile&&make 文章目录 编译器—gcc/g、调试器—gdb以及自动化构建工具—makefile&&make1. 编译器——gcc/g1.1 生成可执行文件与修改默认可执行文件1.2 程序的翻译过程以及对应的gcc选项1.2.1 预处理 gcc -E…

VMware Workstation 与 Device/Credential Guard 不兼容 解决办法

问题描述 问题描述&#xff1a; VMware 启动虚拟机会报错。无法运行。 错误信息&#xff1a;VMware Workstation 与 Device/Credential Guard 不兼容。在禁用 Device/Credential Guard 原因分析&#xff1a; 通常原因是 Window 系统开启了 内置的Hyper-V 虚拟机。 解决方案&…

C++模拟实现——红黑树封装set和map

一、红黑树迭代器的实现 基本的框架和实现链表的迭代器思路是一样的&#xff0c;都是对指针进行封装处理&#xff0c;然后实现一些基本的运算符重载&#xff0c;最重要的是operator&#xff0c;需要不递归的实现走中序的规则&#xff0c;这里只实现那最核心的几个基本功能&…

Typecho框架漏洞

这里说的框架漏洞只适用于1.2.0版本及以下的版本 这里说的漏洞是xss漏洞&#xff0c;学过渗透的应该都学过&#xff0c;我在这里就不过多阐述了&#xff0c;下面我们直接进入正题 直接在这个地方插入网址&#xff0c;后面再接上html代码即可&#xff0c;代码如下&#xff1a; …

软件测试: 测试用例

一. 软件测试四要素 测试环境,操作步骤,测试数据,预期结果 二. 基于需求进行测试用例的设计 基于需求设计测试用例是测试设计和开发测试用例的基础,第一步就要分析测试需求,验证需求是否正确,完整,无二义性,并且逻辑自洽.在需求正确的基础上细化测试需求,从测试需求提炼出一…

高防CDN为什么可以防DDOS攻击

CDN的全称是ContentDeliveryNetwork&#xff0c;即内容分发网络&#xff0c;顾名思义&#xff0c;它是一个分布式节点网络(也称为边缘服务器)&#xff0c;CDN节点具有缓存内容的功能&#xff0c;使用户可以在不获取源服务器数据的情况下就近获取所需内容&#xff0c;提高客户访…

你知道什么是SaaS吗?

你知道什么是SaaS吗&#xff1f; 云服务架构的三个概念 PaaS 英文就是 Platform-as-a-Service&#xff08;平台即服务&#xff09;PaaS&#xff0c;某些时候也叫做中间件。就是把客户采用提供的开发语言和工具&#xff08;例如Java&#xff0c;python, .Net等&#xff09;开…

【Django使用】django经验md文档10大模块。第4期:Django数据库增删改查

Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用&#xff0c;多个组件可以很方便的以"插件"形式服务于整个框架&#xff0c;Django有许多功能强大的第三方插件&#xff0c;你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展…

【Highway-env】IntersectionEnv代码阅读

文章目录 主要完成任务代码结构1.action space2.default_config3.reward_agent_rewards_agent_reward_reward_rewards小结 4.terminated & truncated5.reset_make_road_make_vehicles_spawn_vehicle 6.step 主要完成任务 IntersectionEnv继承自AbstractEnv,主要完成以下4个…

基于单片机16路抢答器仿真系统

**单片机设计介绍&#xff0c; 基于单片机16路抢答器仿真系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的16路抢答器仿真系统是一种用于模拟和实现抢答竞赛的系统。该系统由硬件和软件两部分组成。 硬件方面&am…

单张图像3D重建:原理与PyTorch实现

近年来&#xff0c;深度学习&#xff08;DL&#xff09;在解决图像分类、目标检测、语义分割等 2D 图像任务方面表现出了出色的能力。DL 也不例外&#xff0c;在将其应用于 3D 图形问题方面也取得了巨大进展。 在这篇文章中&#xff0c;我们将探讨最近将深度学习扩展到单图像 3…

CICD 持续集成与持续交付——git

git使用 [rootcicd1 ~]# yum install -y git[rootcicd1 ~]# mkdir demo[rootcicd1 ~]# cd demo/ 初始化版本库 [rootcicd1 demo]# git init 查看状态 [rootcicd1 demo]# git status[rootcicd1 demo]# git status -s #简化输出 [rootcicd1 demo]# echo test > README.md[roo…

计算机毕业设计选题推荐-内蒙古旅游微信小程序/安卓APP-项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

控制您的音乐、视频等媒体内容

跨多个 Chrome 标签页播放音乐或声音 在计算机上打开 Chrome 。在标签页中播放音乐、视频或其他任何有声内容。您可以停留在该标签页上&#xff0c;也可以转到别处。要控制声音&#xff0c;请在右上角点击“媒体控件”图标 。您可暂停播放、转到下一首歌曲/下一个视频&#xf…

六大排序(插入排序、希尔排序、冒泡排序、选择排序、堆排序、快速排序)未完

文章目录 排序一、 排序的概念1.排序&#xff1a;2.稳定性&#xff1a;3.内部排序&#xff1a;4.外部排序&#xff1a; 二、插入排序1.直接插入排序2.希尔排序 三、选择排序1.直接选择排序方法一方法二直接插入排序和直接排序的区别 2.堆排序 四、交换排序1.冒泡排序2.快速排序…

机器视觉系统中的工业镜头的参数

光学倍率 β 焦距 f F值&#xff08;光圈&#xff09;Fno. 数值孔径 NA 工作距离 WD 视场&#xff08;视场角&#xff0c;视野&#xff09; 景深DOF 分辨率、分辨力 MTF 畸变