Vue3_ElementPlus_简单增删改查(2023)
Vue3,Element Plus简单增删改查

代码:https://github.com/xiaoming12318/Vue3_ElementPlus_CRUD.git
环境:
Visual Studio Code
Node.js 16.0或更高版本,https://nodejs.org/en
axios
快速上手:
如果已经有16.0及以上就不用再重复安装了
官网安装node安装过程有一项是Add to Path勾选自动配置环境变量

安装后测试

第一个Vue项目
使用管理员打开命令行,在目标文件夹(创建一个新的文件夹)下创建vue项目
npm init vue@latest
指定vue项目名,选择自定义或者回车为默认值vue-project

自定义为vue初始化

| 名称 | 功能 |
|---|---|
| Add TypeScript | 添加TS |
| Add JSX Support | 是否支持JSX |
| Add Vue Router for Single Page Application development | 为单页程序开发添加Vue路由 |
| Add Pinia for state management | 用于状态管理的Pinia |
| Add Vitest for Unit Testing | 添加Vitest用于单元测试 |
| Add Cypress for both Unit and End-to-End testing | 添加Vitest用于单元和端到端的测试 |
| Add ESLint for code quality | 添加ESLint检查代码质量 |
| Add Prettier for code formatting | 为代码格式化添加Prettier |
进入生成的文件
cd vue-project //对应自定义名称npm install npm run dev

文件项说明



完成初始化之后,开启第一个vue3+ElementPlus增删改查项目

1.main.js中引入所需的包
以管理员方式打开命令行,导入所需包
//UI界面设计npm install element-plus --save//发送请求所使用的APInpm i axios
// import './assets/main.css'//引入ElementPlus和样式文件
import ElementPlus from "element-plus"
import "element-plus/dist/index.css"
//创建vue
import { createApp } from 'vue'
import App from './App.vue'const app=createApp(App)
//使用ElementPlus
app.use(ElementPlus)
//启动APP
app.mount("#app")
1.1.列表展示
1.1.1.声明数组
在App.vue中声明一个响应式数组,用于封装list数据,并且回显
const list=ref([])
1.1.2.发送axios请求获取数据
-
通过mock生成随机数据

通过官网下载
在项目目录创建mock目录,编写一个用于自定义数据的脚本
import Mock from "mockjs" // 内存模拟数据 const arr = [] for (let i = 0; i < 10; i++) { //存入10条数据arr.push({id: Mock.mock("@id"),name: Mock.mock("@cname"),place: Mock.mock("@county(true)"),}) } //定义请求 export default [{url: "/list",method: "get",response: () => {return arr},},{url: "/del/:id",method: "delete",//响应体接收一个请求体传过来的数据response: (req) => {//调用数组的findIndex方法,检索特定需求的数据//findIndex:匹配返回元素的索引,未匹配返回-1//index并赋值给index//===严格相等运算符,值的类型不对应则返回false//这里通过原数组中的数据与接收请求体的数据做比较,//if>-1则匹配到对应的id,通过splice删除数组中的数据,splice与delete的区别是,delete删除元素,但是会保留元素原本的位置,比如arr数组有三个元素,当使用 delete arr[1]删除第二个元素时,再使用arr.length结果还是3//splice则把占位一并删除 arr.splice(1,1),删除第二个元素从第二个元素开始删除一条元素const index = arr.findIndex((item) => item.id === req.query.id)if (index > -1) {//arr.splice(index, 1)return { success: true }} else {//否则就是没有查询到对应数据return { success: false }}},},{url: "/edit/:id",method: "patch",response: ({ query, body }) => {const item = arr.find((item) => item.id === query.id)if (item) {item.name = body.nameitem.place = body.placereturn { success: true }} else {return { success: false }}},}, ]在vite.config.js中编写Mock服务
viteMockServe({//刚刚创建的mock目录mockPath: "./mock",localEnabled: true,}),在App.vue的script setup中编写请求代码
const getList=()=>{const res=await axios.get("/list")list.value=res.data }编写一个生命周期钩子函数onMounted(在组件挂载完成后执行)中调用getList函数 onMounted(()=>{getList() })Vue生命周期
可以看到mounted是在初始化渲染创建和插入DOM节点之后被启用的

1.1.3.回显数据
在列表中回显数据,通过以上代码已知list中已有所需数据,则添加到elementUI的表中即可回显数据
<el-table :data="list">
总结
列表显示中注意事项
使用由mock生成的随机数据作为数据源
-
安装mock npm i vite-plugin-mock
-
在vite.config.js中从vite-plugin-mock中引入viteMockServe
-
在plugins中并配置mock自定义mock配置的路径
export default defineConfig({plugins: [vue(),viteMockServe({mockPath: "./mock",localEnabled: true,}),],resolve: {alias: {'@': fileURLToPath(new URL('./src', import.meta.url))}} })
-
-
在项目目录创建mock目录,创建mock.js用于响应前端发送的请求,并且把结果判断的值返回
1.2.删除
1.2.1.绑定单击事件
在删除的button中绑定一个单击事件
<el-button type="danger" link @click="deleteById()">删除</el-button>
1.2.2.编写删除脚本代码
测试按钮是否绑定成功
在script中编写方法
const deleteById=()=>{console.log("删除测试")
}
通过单击获取行数据,使用vue3特性中table组件中的default插槽,template后面写入 #default=row
<template #default=row><el-button type="danger" link @click="deleteById(row)">删除</el-button>
</template>
在绑定按钮的方法中编写获取数据,控制台打印
script中接收数据,获取id
const deleteById=(data)=>{const id=data.row.idconsole.log(data)
}

1.2.3.发送请求到mock自定义的虚拟数据
写法和上面list唯一的差别是方法名和请求体中携带参数const res=await axios.delete(`/del/${id}`)
此时单击则可以实现删除
1.2.4.完成删除实时更新列表
//deleteById的末尾调用list更新列表,表示先删除再更新
getList()
1.3.编辑
采用组件化的编写方式,编写一个组件实现编辑功能,涉及子父组件通信
1.3.1.绑定编辑单击事件
在父组件:App.vue中的编辑按钮编写一个click事件,并把数据放入方法中
<el-button type="primary" link @click="onEdit(row)"
1.3.2.引入子组件
在父组件App.vue中引入Edit.vue
import Edit from './components/edit.vue'
具体位置视自身情况定。
1.3.3.在template中使用子组件,并在其中声明一个ref用于子父通信
在template中引入Edit作为子组件
<template><div class="app"><el-table :data="list"><el-table-column prop="id" label="ID" width="180"></el-table-column><el-table-column prop="name" label="name"></el-table-column><el-table-column prop="place" label="place"></el-table-column><el-table-column prop="operation" label="operation"><template #default=row><el-button type="primary" link @click="onEdit(row)">编辑</el-button><el-button type="danger" link @click="deleteById(row)">删除</el-button></template></el-table-column></el-table></div>//这个部分<Edit ref="editRef" />
</template>
其中为Edit嵌入一个ref即可让父子间实现简单通信
当然也需要在script中定义editRef
//传入子组件的ref
constconst editRef=ref(null)
//点击编辑通过子父组件通信的弹窗
const onEdit=(list)=>{editRef.value.openDialog(list.row)
}
1.3.4.在子组件中编写template代码和script
在子组件中编写以下代码,具体可以去"Element+"自定义想要的格式
<template><el-dialog v-model="dialogVisible"title="编辑"width="400px"><el-form :model="form" label-width="50px"><el-form-item label="姓名"><el-input v-model="list.name" autocomplete="off"/></el-form-item><el-form-item label="地区"><el-input v-model="list.place"/></el-form-item></el-form><template #footer><span class="dialog-footer"><el-button @click="dialogVisible = false">取消</el-button><el-button type="primary" >确认</el-button></span></template></el-dialog></template><style scoped>
.el-input {width: 290px;
}
</style>
在script中编写参数
1.编写一个响应式方法接收父组件在Edit中传入的数据
const list=ref({id:'',name:'',place:''
})
//以及一个控制弹窗的开关
const dialogVisible=ref(false)
2.编写一个方法接收数据
const openDialog=(row)=>{list.name=row.name,list.place=row.placelist.id=row.id//父组件在调用方法的同时会打开dialog窗口dialogVisible.value=true
}暴露方法,使父组件可收到
defineExpose({openDialog
})const emit=defineEmits(['on-update'])
3.回显数据到到Edit.vue中的dialog
解释上面template代码,<el-input>中的v-model="list.name",就是从list中获取name
<el-form-item label="姓名"><el-input v-model="list.name" autocomplete="off"/>
</el-form-item>
<el-form-item label="地区"><el-input v-model="list.place"/>
</el-form-item>
1.3.5.修改完成时在子组件中发送axios请求

如图,当修改完毕,发送axios请求
在按钮中绑定单击事件
<el-button type="primary" @click="onUpdate">确认</el-button>
在script中测试是否绑定成功,并发送axios请求
const onUpdate=async()=>{console.log("绑定成功")await axios.put({method:'put',url:`/edit/${id}`,data:{name:list.name,place:list.place},}).then((res)=>{//发送请求//1.把更新列表请求发送给父组件,将会使用到defineEmits()//这个emit方法在上面已经定义emit('on-update')//2.关闭窗口dialogVisible.value=false})
}
关于defineEmit的具体操作参考官网文档
1.3.6.通过子组件发出的请求,父组件调用list方法更新列表
父组件的<Edit>中<Edit ref="editRef" @on-update="getList"/>
自此一个简单的基于Vue3+ElementPlus的简单删改查就完成了。
相关文章:
Vue3_ElementPlus_简单增删改查(2023)
Vue3,Element Plus简单增删改查 代码:https://github.com/xiaoming12318/Vue3_ElementPlus_CRUD.git 环境: Visual Studio Code Node.js 16.0或更高版本,https://nodejs.org/en axios 快速上手: 如果已经有16.0及…...
vue中重写并自定义console.log
0. 背景 在vue2项目中自定义console.log并输出文件名及行、列号 1. 实现 1.1 自定义console.log export default {// 输出等级: 0-no, 1-error, 2-warning, 3-info, 4-debug, 5-loglevel: 5,// 输出模式: 0-default, 1-normal, 2-randommode: 1,// 是否输出图标hasIcon: fal…...
基于OpenCV 和 Dlib 进行头部姿态估计
写在前面 工作中遇到,简单整理博文内容涉及基于 OpenCV 和 Dlib头部姿态评估的简单Demo理解不足小伙伴帮忙指正 庐山烟雨浙江潮,未到千般恨不消。到得还来别无事,庐山烟雨浙江潮。 ----《庐山烟雨浙江潮》苏轼 https://github.com/LIRUILONGS…...
24个Jvm面试题总结及答案
1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。 Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每…...
freemarker 生成前端文件
Freemarker是一种模板引擎,它允许我们在Java应用程序中分离视图和业务逻辑。在Freemarker中,List是一种非常有用的数据结构,它允许我们存储一组有序的元素。有时候,我们需要判断一个List是否为空,这在程序设计中有许多…...
Pycharm+pytest+allure打造高逼格的测试报告
目录 前言: 1、安装allure 2、安装allure-pytest 3、一个简单的用例test_simpe.py 4、在pycharm底部打开terminal 5、用allure美化报告 6、查看报告 总结: 前言: 今天分享的内容:在Pycharmpytest基础上使用allure打造高逼格…...
Mybatis-Plus中update更新操作用法
目录 一、前言二、update1、关于修改的4个条件构造器2、UpdateWrapper【用法示例】3、LambdaUpdateWrapper【用法示例】4、UpdateChainWrapper【 用法示例】5、LambdaUpdateChainWrapper【 用法示例】6、updateById 和 updateBatchById7、Mybatis-plus设置某个字段值为null的方…...
16道JVM面试题
1.jvm内存布局 1.程序计数器:当前线程正在执行的字节码的行号指示器,线程私有,唯一一个没有规定任何内存溢出错误的情况的区域。 2.Java虚拟机栈:线程私有,描述Java方法执行的内存模型,每个方法运行时都会…...
HttpRunner 接口自动化测试框架实战,打造高效测试流程
简介 2018年python开发者大会上,了解到HttpRuuner开源自动化测试框架,采用YAML/JSON格式管理用例,能录制和转换生成用例功能,充分做到用例与测试代码分离,相比excel维护测试场景数据更加简洁。在此,利用业…...
手写一个webpack插件(plugin)
熟悉 vue 和 react 的小伙伴们都知道,在执行过程中会有各种生命周期钩子,其实webpack也不例外,在使用webpack的时候,我们有时候需要在 webpack 构建流程中引入自定义的行为,这个时候就可以在 hooks 钩子中添加自己的方…...
jvm常见面试题
0x01. 内存模型以及分区,需要详细到每个区放什么。 栈区: 栈分为java虚拟机栈和本地方法栈 重点是Java虚拟机栈,它是线程私有的,生命周期与线程相同。 每个方法执行都会创建一个栈帧,用于存放局部变量表࿰…...
TF-A 项目的长期支持介绍
引流关键词:Armv8-A, Armv9-A, Cortex-A, Cortex-A12, Cortex-A15, Cortex-A17, Cortex-A32, Cortex-A34, Cortex-A35, Cortex-A5, Cortex-A510, Cortex-A53, Cortex-A55, Cortex-A57, Cortex-A65, Cortex-A65AE, Cortex-A7, Cortex-A710, Cortex-A715, Cortex-A72, Cortex-A7…...
企业电子招标采购系统源码java 版本 Spring Cloud + Spring Boot
项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及…...
7.Mysql 事务底层
一、事务的基础知识 mysql中的事务 分为 显式事务 和 隐式事务。 1.1 显式事务 显式事务就是我们手动开启事务,并且提交事务比如: -- 开启事务 begin; -- 执行查询语句 select *from where id = 1 for update ; -- 提交事务 commit;1.2 隐式事务 在 MySQL 中,隐式事务是…...
15.DIY可视化-拖拽设计1天搞定主流小程序-分类联动文章列表实时刷新
分类联动文章列表实时刷新 本教程均在第一节中项目启动下操作 分类联动文章列表实时刷新前言需求一:功能实现:点击首页分类,对应分类内容显示到当前页一、清空原分类界面:二. 设置选项卡三:设定展示内容字段:1.跨页面复制:文章分类组件到分类
CRect rect; this->GetClientRect(rect); pDC->Ellipse(rect); // DDALineView.cpp : implementation of the CDDALineView class // #include “stdafx.h” #include “DDALine.h” #include “DDALineDoc.h” #include “DDALineView.h” #ifdef _DEBUG #define new…...
Spark大数据处理学习笔记(3.2.1)掌握RDD算子
该文章主要为完成实训任务,详细实现过程及结果见【http://t.csdn.cn/FArNP】 文章目录 一、准备工作1.1 准备文件1. 准备本地系统文件2. 把文件上传到 1.2 启动Spark Shell1. 启动HDFS服务2. 启动Spark服务3. 启动Spark Shell 二、掌握转换算子2.1 映射算子 - map()…...
lammps初级:石墨烯、金属材料、纳米流体、热传导、多成分体系、金属、半导体材料的辐照、自建分子力场、MOFS、H2/CO2混合气体等模拟
1 LAMMPS的基础入门——初识LAMMPS是什么?能干什么?怎么用? 1.1 LAMMPS在win10和ubuntu系统的安装及使用 1.2 in文件结构格式 1.3 in文件基本语法:结合实例,讲解in文件常用命令 1.4 data文件格式 1.5 LAMMPS常见错误解…...
【MarkerDown】CSDN Markdown之时序图sequenceDiagram详解
CSDN Markdown之时序图sequenceDiagram详解 序列图 sequenceDiagram参与者与组参与者 participant拟人符号 actor别名 as组 box 消息(连线)激活/失活 activate/deactivate备注 Note循环 loop备选 Alt并行 par临界区 critical中断 break背景高亮 rect注释 %%转义字符的实体代码序…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
五子棋测试用例
一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏,有着深厚的文化底蕴。通过将五子棋制作成网页游戏,可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家,都可以通过网页五子棋感受到东方棋类…...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
