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

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请求获取数据

  1. 通过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&#xff0c;Element Plus简单增删改查 代码&#xff1a;https://github.com/xiaoming12318/Vue3_ElementPlus_CRUD.git 环境&#xff1a; Visual Studio Code Node.js 16.0或更高版本&#xff0c;https://nodejs.org/en axios 快速上手&#xff1a; 如果已经有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 进行头部姿态估计

写在前面 工作中遇到&#xff0c;简单整理博文内容涉及基于 OpenCV 和 Dlib头部姿态评估的简单Demo理解不足小伙伴帮忙指正 庐山烟雨浙江潮&#xff0c;未到千般恨不消。到得还来别无事&#xff0c;庐山烟雨浙江潮。 ----《庐山烟雨浙江潮》苏轼 https://github.com/LIRUILONGS…...

24个Jvm面试题总结及答案

1.什么是Java虚拟机&#xff1f;为什么Java被称作是“平台无关的编程语言”&#xff1f; Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。 Java被设计成允许应用程序可以运行在任意的平台&#xff0c;而不需要程序员为每…...

freemarker 生成前端文件

Freemarker是一种模板引擎&#xff0c;它允许我们在Java应用程序中分离视图和业务逻辑。在Freemarker中&#xff0c;List是一种非常有用的数据结构&#xff0c;它允许我们存储一组有序的元素。有时候&#xff0c;我们需要判断一个List是否为空&#xff0c;这在程序设计中有许多…...

Pycharm+pytest+allure打造高逼格的测试报告

目录 前言&#xff1a; 1、安装allure 2、安装allure-pytest 3、一个简单的用例test_simpe.py 4、在pycharm底部打开terminal 5、用allure美化报告 6、查看报告 总结&#xff1a; 前言&#xff1a; 今天分享的内容&#xff1a;在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.程序计数器&#xff1a;当前线程正在执行的字节码的行号指示器&#xff0c;线程私有&#xff0c;唯一一个没有规定任何内存溢出错误的情况的区域。 2.Java虚拟机栈&#xff1a;线程私有&#xff0c;描述Java方法执行的内存模型&#xff0c;每个方法运行时都会…...

HttpRunner 接口自动化测试框架实战,打造高效测试流程

简介 2018年python开发者大会上&#xff0c;了解到HttpRuuner开源自动化测试框架&#xff0c;采用YAML/JSON格式管理用例&#xff0c;能录制和转换生成用例功能&#xff0c;充分做到用例与测试代码分离&#xff0c;相比excel维护测试场景数据更加简洁。在此&#xff0c;利用业…...

手写一个webpack插件(plugin)

熟悉 vue 和 react 的小伙伴们都知道&#xff0c;在执行过程中会有各种生命周期钩子&#xff0c;其实webpack也不例外&#xff0c;在使用webpack的时候&#xff0c;我们有时候需要在 webpack 构建流程中引入自定义的行为&#xff0c;这个时候就可以在 hooks 钩子中添加自己的方…...

jvm常见面试题

0x01. 内存模型以及分区&#xff0c;需要详细到每个区放什么。 栈区&#xff1a; 栈分为java虚拟机栈和本地方法栈 重点是Java虚拟机栈&#xff0c;它是线程私有的&#xff0c;生命周期与线程相同。 每个方法执行都会创建一个栈帧&#xff0c;用于存放局部变量表&#xff0…...

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

项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及…...

7.Mysql 事务底层

一、事务的基础知识 mysql中的事务 分为 显式事务 和 隐式事务。 1.1 显式事务 显式事务就是我们手动开启事务,并且提交事务比如: -- 开启事务 begin; -- 执行查询语句 select *from where id = 1 for update ; -- 提交事务 commit;1.2 隐式事务 在 MySQL 中,隐式事务是…...

15.DIY可视化-拖拽设计1天搞定主流小程序-分类联动文章列表实时刷新

分类联动文章列表实时刷新 本教程均在第一节中项目启动下操作 分类联动文章列表实时刷新前言需求一:功能实现:点击首页分类,对应分类内容显示到当前页一、清空原分类界面:二. 设置选项卡三:设定展示内容字段:1.跨页面复制:文章分类组件到分类![在这里插入图片描述](https://img…...

【SpringCloud】二、服务注册发现Eureka与负载均衡Ribbon

文章目录 一、Eureka1、服务提供者与消费者2、Eureka原理分析3、搭建Eureka4、服务注册5、模拟多服务实例启动6、服务的发现 二、Ribbon1、负载均衡的原理2、源码分析3、负载均衡策略4、饥饿加载 一、Eureka 1、服务提供者与消费者 服务提供者&#xff1a;一次业务中&#xf…...

图形学实验(完整文件见上传)

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

该文章主要为完成实训任务&#xff0c;详细实现过程及结果见【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是什么&#xff1f;能干什么&#xff1f;怎么用&#xff1f; 1.1 LAMMPS在win10和ubuntu系统的安装及使用 1.2 in文件结构格式 1.3 in文件基本语法&#xff1a;结合实例&#xff0c;讲解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注释 %%转义字符的实体代码序…...

ReentrantLock实现原理-公平锁

在ReentrantLock实现原理(1)一节中&#xff0c;我们了解了ReentrantLock非公平锁的获取流程&#xff0c;在本节中我们来看下ReentrantLock公平锁的创建以及锁管理流程 创建ReentrantLock公平锁 创建公平锁代码如下&#xff1a; ReentrantLock reentrantLock new ReentrantL…...

掌握Scala数据结构(2)MAP、TUPLE、SET

一、映射 (Map) &#xff08;一&#xff09;不可变映射 1、创建不可变映射 创建不可变映射mp&#xff0c;用键->值的形式 创建不可变映射mp&#xff0c;用(键, 值)的形式 注意&#xff1a;Map是特质&#xff08;Scala里的trait&#xff0c;相当于Java里的interface&#…...

flutter:文件系统目录、文件读写

参考 参考&#xff1a;老孟 文件存储和网络请求 数据存储 Dart的 IO 库包含了文件读写的相关类&#xff0c;它属于 Dart 语法标准的一部分&#xff0c;所以通过 Dart IO 库&#xff0c;无论是 Dart VM 下的脚本还是 Flutter&#xff0c;都是通过 Dart IO 库来操作文件的。但…...

计算机提示“找不到vcruntime140.dll,无法继续执行代码可”以这样子修复

首先&#xff0c;对于那些不熟悉的人来说&#xff0c;vcruntime140.dll是一个关键文件&#xff0c;用于在Windows操作系统上运行使用C语言编写的大型应用程序。如果你正在运行或安装这样的应用程序&#xff0c;但找不到vcruntime140.dll文件&#xff0c;那么你的应用程序可能无…...

深度学习pytorch实战五:基于ResNet34迁移学习的方法图像分类篇自建花数据集图像分类(5类)超详细代码

1.数据集简介 2.模型相关知识 3.split_data.py——训练集与测试集划分 4.model.py——定义ResNet34网络模型 5.train.py——加载数据集并训练&#xff0c;训练集计算损失值loss&#xff0c;测试集计算accuracy&#xff0c;保存训练好的网络参数 6.predict.py——利用训练好的网…...

Rust in Action笔记 第五章 深入理解数据

如果希望看到f32类型的数转换成整型数字u32类型&#xff0c;需要在unsafe包裹下调用std::mem::transmute(data)&#xff0c;因为在安全的Rust语法中没有把整型数据按照bit转换成浮点数据的实现&#xff0c;如果想要看到浮点数的二进制输出&#xff08;通过{:b}&#xff09;&…...

Cocos creator实现飞机大战空中大战《战击长空》小游戏资源及代码

Cocos creator实现飞机大战空中大战《战击长空》小游戏资源及代码 最近在学习Cocos Creator&#xff0c;作为新手&#xff0c;刚刚开始学习Cocos Creator&#xff0c;刚刚入门&#xff0c;这里记录一下飞机大战小游戏实现。 https://wxaurl.cn/VEgRy2eTMyi 一 安装CocosDashBo…...

2.4 逻辑代数的基本定理

学习目标&#xff1a; 如果我要学习逻辑代数的基本定理&#xff0c;我会采取以下步骤&#xff1a; 1. 学习基本概念&#xff1a;首先&#xff0c;我会花时间了解逻辑代数的基本概念&#xff0c;如逻辑运算符&#xff08;合取、析取、否定等&#xff09;、真值表、逻辑等价性等…...

适用于 Linux 的 Windows 子系统wsl文档

参考链接&#xff1a;https://learn.microsoft.com/zh-cn/windows/wsl/ 鸟哥的Linux私房菜&#xff1a;http://cn.linux.vbird.org/ http://cn.linux.vbird.org/linux_basic/linux_basic.php http://cn.linux.vbird.org/linux_server/ 目录 安装列出可用的 Linux 发行版列出已…...

C++特殊类的设计与类型转换

特殊类的设计与类型转换 特殊类的设计请设计一个类&#xff0c;只能在堆上创建对象请设计一个类&#xff0c;只能在栈上创建对象请设计一个类&#xff0c;只能创建一个对象(单例模式) C的类型转换 特殊类的设计 请设计一个类&#xff0c;只能在堆上创建对象 通过new创建的类就…...

三只松鼠网站建设/临沂seo

JVM PPT的演进文稿分享 此PPT长达46页&#xff0c;不方便在页面中全部展示&#xff0c;文中只展示了文稿的前十二页。 获取完整版请在公众号内回复“JVM”。...

哪个网站可以做字体大小/国内最好用免费建站系统

上午 题还是比较水的... T1 attack 题意&#xff1a; 给一个有向图&#xff0c;Q次询问K个点&#xff0c;问从1到K个点的必经点 (没说是DAG&#xff0c;但数据是DAG...)、 支配树的裸题吗&#xff0c;但是不会支配树啊.... 然后就求割点&#xff0c;桥&#xff0c;然后就懵逼了…...

网站如何强制修改主页 源码/关键词优化师

数字是表示计数的抽象事物&#xff0c;也是数学运算和推理的基础&#xff0c;所以&#xff0c;生活中数字是生活中无处不在的&#xff0c;那么&#xff0c;在python语言中运用数字有哪些小知识呢&#xff0c;不妨花点时间看一下这篇博文&#xff0c;牢记这些小知识。 整数类型中…...

电子商务网站开发费用/h5网站制作平台

5V 输入升压开关型双节锂电池充电管理芯片 -FS5080ES FS5080ES 是一款 3.6V-5.5V/2A 输入&#xff0c; 1A 输出&#xff0c;双节锂电池/锂离子电池充电的异步升压充电控制器。具有完善的充电保护功能。针对不同的应用场合&#xff0c;芯片可以通过方便地调节外部电阻的阻值来改…...

做网站还能挣钱吗/一件代发48个货源网站

1.鼠标设定:在Allegro视窗layout时,每执行一个指令例&#xff1a;Addconnect, Show element等鼠标会跳到Option窗口,这样对layout造成不便. 1)控制面版&#xff1e;滑鼠之移动选项中,指到预设按钮&#xff08;或智慧型移动&#xff09;&#xff1a;取消“在对话方块将滑鼠指标…...

模板网站建设公司电话/网站建设需要多少钱

前言&#xff1a;最近因项目需求&#xff0c;需要打包linux-qt程序给客户先用一下子。百度一大堆终于找了几个靠谱的来综合一下&#xff0c;留为备用吧。由于是先遣版所以仅制作为免安装程序的格式。正文&#xff1a;博主的qt是5.9.2的&#xff0c;程序名称为ocs&#xff0c;下…...