vue2新增删除

(只是页面实现,不涉及数据库)
list组件:

 <button @click="onAdd">新增</button>
         <el-table
            :header-cell-style="{ textAlign: 'center' }"  
            :cell-style="{ textAlign: 'center' }"
          :data="tableData"
          style="width: 100%">
           <el-table-column
            type="selection"
            width="55">
          </el-table-column>
          <el-table-column
            prop="id"
            label="序号"
            max-width="100">
          </el-table-column>
          <el-table-column
            prop="name"
            label="姓名"
            max-width="100">
          </el-table-column>
          <el-table-column
            prop="address"
            max-width="100"
            label="地址">
          </el-table-column>
              <el-table-column label="操作">
                <template slot-scope="scope">
                  <el-button
                    size="mini"
                    @click="handleEdit( scope.row)">编辑</el-button>
                  <el-button
                    size="mini"
                    type="danger"
                    @click="handleDelete(scope.row)">删除</el-button>
                </template>
              </el-table-column>
        </el-table>
          // 引入  新增弹框组件
        <Add  :visible.sync="dialogVisible" :title="title" />
          <!-- 引入 编辑弹框组件 -->
        <Edit  :visible.sync="dialog"  :title="titleedit" :item="ruleForm"  @save="saveItem" />
js部分:
     created(){
     //获取列表数据
           this.getUser(),
           
          // 监听 'formSubmitted' 事件,当表单数据提交时更新列表
          EventBus.$on('formSubmitted', (newData) => {
               // 计算当前 tableData 中的最大 id   添加数据时候 id按照顺序自增
            const maxId = this.tableData.length > 0 ? Math.max(...this.tableData.map(item => item.id)) : 0;
            
            // 设置新的 id
            newData.id = maxId + 1;
            this.tableData.push(newData); // 添加新数据到 dataList
          });
      },
      methods:{
          // 点击新增按钮
		    onAdd(){
		          this.dialogVisible=true;
		        },

		//  删除
		handleDelete( row ) {
		  console.log(row)
		  this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
		            confirmButtonText: '确定',
		            cancelButtonText: '取消',
		            type: 'warning',
		            center: true
		          }).then(() => {
		            // 通过 row 数据找到索引并删除
		      const itemIndex = this.tableData.findIndex(item => item.id === row.id);
		      console.log(itemIndex)
		      if (itemIndex !== -1) {
		        this.tableData.splice(itemIndex, 1);
		      }
		      this.reassignIds()
		            this.$message({
		              type: 'success',
		              message: '删除成功!'
		            });
		          }).catch(() => {
		            this.$message({
		              type: 'info',
		              message: '已取消删除'
		            });
		          });
		    
		},

			// 重新分配数据的id  保证其自增
			reassignIds(){
			  this.tableData.forEach((item,index)=>{
			    item.id=index+1
			  })
			}
}

// 编辑
handleEdit(row){
  console.log(row,'row')
     this.dialog=true;
     this.titleedit="编辑"
     this.ruleForm={...row}  // // 复制项的数据到 列表中
},
 // 保存编辑后的项
    saveItem(updatedItem) {
      console.log(updatedItem,'updatedItem')
      // 更新列表中的数据,通常会同步到后端
      const index = this.tableData.findIndex(item => item.id === updatedItem.id);
      if (index !== -1) {
         this.$set(this.tableData, index, { ...updatedItem }); // 使用 Vue.set 来确保响应式更新数据列表
        console.log(this.tableData,'this.tableData[index]')
      }

    }

Add组件:

        <el-dialog
            :title="title"
            :visible.sync="visible"
            width="30%"
            center
          >
                <el-form :model="ruleForm"  :rules="rules"  ref="ruleForm" label-width="100px" class="demo-ruleForm">
                    <el-form-item label="序号" prop="id">
                        <el-input type="text" v-model="ruleForm.id" ></el-input>
                    </el-form-item>
                    <el-form-item label="姓名" prop="name">
                        <el-input type="text" v-model="ruleForm.name"></el-input>
                    </el-form-item>
                    <el-form-item label="地址" prop="address">
                        <el-input v-model.number="ruleForm.address"></el-input>
                    </el-form-item>
                    <el-form-item>
                        <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
                        <el-button @click="resetForm('ruleForm')">重置</el-button>
                    </el-form-item>
                </el-form>
            </el-dialog>
 
 js部分:
 import {EventBus} from '../util/eventBus'export default {
    data() {
      return {
        ruleForm:{
            // id:'',
            name:'',
            address:''
        },
      rules: {
        // id: [
        //   { required: true, message: '序号不能为空', trigger: 'blur' }
        // ],
        name: [
          { required: true, message: '姓名不能为空', trigger: 'blur' }
        ],
        address: [
          { required: true, message: '地址不能为空', trigger: 'blur' }
        ]
      }
      }
    },
    props:{
        visible:{
            typeof:Boolean,
            default:false
        },
        title:{
            typeof:String,
            default:''
        }
    },
    watch:{
        visible(newVal){
            this.$emit('update:visible', newVal);
        }
    },
    methods:{
        closeDialog(){
             this.$emit('update:visible', false); 
        },
// 提交
// 提交表单
      submitForm(formName) {
      this.$refs[formName].validate((valid) => {
      if (valid) {
          // 提交数据到 Vuex
           const formCopy = { ...this.ruleForm }; // 创建 ruleForm 的副本
          EventBus.$emit('formSubmitted', formCopy);
          this.$message.success('提交成功');
          
          this.ruleForm.name=''
          this.ruleForm.address=''
          this.closeDialog();
       
        } else {
          // this.$message.error('表单验证失败');
        }
      });
    },
        // 重置
     resetForm(formName) {
        this.$refs[formName].resetFields();
      }
    }
  };
</script>
            
event-bus.js中:

// event-bus.js
import Vue from 'vue';
// 创建一个空的 Vue 实例作为事件总线
export const EventBus = new Vue();

// 编辑弹框
<template>
  <div>
        <el-dialog
            :title="title"
            :visible.sync="visible"
            width="30%"
            center
          >
                <el-form :model="ruleForm"  :rules="rules"  ref="ruleForm" label-width="100px" class="demo-ruleForm">
                    <el-form-item label="姓名" prop="name">
                        <el-input type="text" v-model="ruleForm.name"></el-input>
                    </el-form-item>
                    <el-form-item label="地址" prop="address">
                        <el-input v-model.number="ruleForm.address"></el-input>
                    </el-form-item>
                    <el-form-item>
                        <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
                        <el-button @click="resetForm('ruleForm')">重置</el-button>
                    </el-form-item>
                </el-form>
            </el-dialog>
  </div>
</template>

<script>
import {EventBus} from '../util/eventBus'

  export default {
    data() {
      return {
        ruleForm:{
            name:'',
            address:''
        },
      rules: {
        name: [
          { required: true, message: '姓名不能为空', trigger: 'blur' }
        ],
        address: [
          { required: true, message: '地址不能为空', trigger: 'blur' }
        ]
      }
      }
    },
    props:{
        visible:{
            typeof:Boolean,
            default:false
        },
        title:{
            typeof:String,
            default:''
        },
        item:{
            typeof:Object,
            default:()=>({})
        }
    },
    watch:{
        visible(newVal){
            this.$emit('update:visible', newVal);
        },
        item(newItem){
            this.ruleForm={...newItem}
        }
    },
    methods:{

        closeDialog(){
               this.$emit('update:visible', false); 
        },

        // 重置
      resetForm(formName) {
        console.log(formName,'formName')
        this.$refs[formName].resetFields();
        this.ruleForm.name='',
        this.ruleForm.address=''
      },
 //  提交
      submitForm(){
        this.$emit('save',this.ruleForm)
        this.closeDialog()
      }
    }
  };
</script>



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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux下文件操作相关接口

文章目录 一 文件是什么普通数据文件 二 文件是谁打开的进程用户 三 进程打开文件的相关的接口c语言标准库相关文件接口1. fopen 函数2. fread 函数3. fwrite 函数4. fclose 函数5. fseek 函数 linux系统调用接口1. open 系统调用2. creat 系统调用3. read 系统调用4. write 系…

UE蓝图节点备忘录

获取索引为0的玩家 获取视图缩放 反投影屏幕到世界 获取屏幕上的鼠标位置 对指定的物体类型进行射线检测 判断物体是否有实现某个接口 上面节点的完整应用 通过PlayerControlle获取相机相关数据 从相机处发射射线撞击物体从而获取物体信息 抽屉推拉功能 节点说明 ##门的旋转开关…

玩机搞机基本常识-------列举安卓机型一些不常用的adb联机命令

前面分享过很多 常用的adb命令&#xff0c;今天分享一些不经常使用的adb指令。以作备用 1---查看当前手机所有app包名 adb shell pm list package 2--查看当前机型所有apk包安装位置 adb shell pm list package -f 3--- 清除指定应用程序数据【例如清除浏览器应用的数据】 …

LeetCode【剑指offer】系列(字符串篇)

剑指offer05.替换空格 题目链接 题目&#xff1a;假定一段路径记作字符串path&#xff0c;其中以 “.” 作为分隔符。现需将路径加密&#xff0c;加密方法为将path中的分隔符替换为空格" "&#xff0c;请返回加密后的字符串。 思路&#xff1a;遍历即可。 通过代…

idea java.lang.OutOfMemoryError: GC overhead limit exceeded

Idea build项目直接报错 java: GC overhead limit exceeded java.lang.OutOfMemoryError: GC overhead limit exceeded 设置 编译器 原先heap size 设置的是 700M , 改成 2048M即可

aws(学习笔记第二十二课) 复杂的lambda应用程序(python zip打包)

aws(学习笔记第二十二课) 开发复杂的lambda应用程序(python的zip包) 学习内容&#xff1a; 练习使用CloudShell开发复杂lambda应用程序(python) 1. 练习使用CloudShell CloudShell使用背景 复杂的python的lambda程序会有许多依赖的包&#xff0c;如果不提前准备好这些python的…

conda 批量安装requirements.txt文件

conda 批量安装requirements.txt文件中包含的组件依赖 conda install --yes --file requirements.txt #这种执行方式&#xff0c;一遇到安装不上就整体停止不会继续下面的包安装。 下面这条命令能解决上面出现的不执行后续包的问题&#xff0c;需要在CMD窗口执行&#xff1a; 点…

如何操作github,gitee,gitcode三个git平台建立镜像仓库机制,这样便于维护项目只需要维护一个平台仓库地址的即可-优雅草央千澈

如何操作github&#xff0c;gitee&#xff0c;gitcode三个git平台建立镜像仓库机制&#xff0c;这样便于维护项目只需要维护一个平台仓库地址的即可-优雅草央千澈 问题背景 由于我司最早期19年使用的是gitee&#xff0c;因此大部分仓库都在gitee有几百个库的代码&#xff0c;…

SpringBootWeb 登录认证(day12)

登录功能 基本信息 请求参数 参数格式&#xff1a;application/json 请求数据样例&#xff1a; 响应数据 参数格式&#xff1a;application/json 响应数据样例&#xff1a; Slf4j RestController public class LoginController {Autowiredpriva…

nginx http反向代理

系统&#xff1a;Ubuntu_24.0.4 1、安装nginx sudo apt-get update sudo apt-get install nginx sudo systemctl start nginx 2、配置nginx.conf文件 /etc/nginx/nginx.conf&#xff0c;但可以在 /etc/nginx/sites-available/ 目录下创建一个新的配置文件&#xff0c;并在…

【25考研】川大计算机复试情况,重点是啥?怎么准备?

24年进入复试的同学中&#xff0c;有10位同学的复试成绩为0分。具体是个人原因还是校方原因&#xff0c;还尚不明确。但是C哥提醒&#xff0c;一定要认真复习&#xff01;复试完后不要跟任何人讨论有关复试的题目及细节&#xff01; 一、复试内容 四川大学复试内容较多&#xf…

React Native 项目 Error: EMFILE: too many open files, watch

硬件&#xff1a;MacBook Pro (Retina, 13-inch, Mid 2014) OS版本&#xff1a;MacOS BigSur 11.7.10 (20G1427) 更新: 删除modules的方法会有反弹&#xff0c;最后还是手动安装了预编译版本的watchman。 React Native 项目运行npm run web&#xff0c;出现如下错误&#xff1a…

YOLO11改进算法 | 引入SimAM模块的YOLO11-pose关键点姿态估计

目录 网络结构 测试结果 算法改进 局部和全局特征的兼顾 提升模型精度 提高计算效率 增强模型鲁棒性 模型指标 数据集介绍 Coovally AI模型训练与应用平台 YOLO11是由Ultralytics团队于2024年9月30日发布的&#xff0c;它是YOLO&#xff08;You Only Look Once&#…

运放输入偏置电流详解

1 输入阻抗与输入偏置电路关系 在选择运放和仪表运放时&#xff0c;经常听到这样的说法&#xff1a;“需要非常高的输入阻抗”&#xff0c;事实上真实如此吗&#xff1f; 输入阻抗&#xff08;更确切的说是输入电阻&#xff09;很少会成为一个重要的问题&#xff08;输入电容也…

HTML基础入门——简单网页页面

目录 一&#xff0c;网上转账电子账单 ​编辑 1&#xff0c;所利用到的标签 2&#xff0c;代码编写 3&#xff0c;运行结果 二&#xff0c;李白诗词 1&#xff0c;所用到的标签 2&#xff0c;照片的编辑 3&#xff0c;代码编写 4&#xff0c;运行结果 一&#xff0c;网…

Kubernetes集群架构

Kubernetes集群架构 Kubernetes 集群架构控制平面组件kube-apiserveretcdkube-schedulerkube-controller-managercloud-controller-manager 节点组件kubeletkebe-proxy&#xff08;可选&#xff09;容器运行时 插件DNSWeb UI&#xff08;Dashboard&#xff09;容器资源监控集群…

腾讯云AI代码助手-每日清单助手

作品简介 每日清单助手是一款可以记录生活的小程序&#xff0c;在人们需要记录时使用&#xff0c;所以根据这个需求来创建的这款应用工具&#xff0c;使用的是腾讯云AI代码助手来生成的所有代码&#xff0c;使用方便&#xff0c;快捷&#xff0c;高效。 技术架构 python语言…

创建基本的 Electron 应用项目的详细步骤

创建一个基本的 Electron 应用项目的详细步骤。我们将从安装 Node.js 开始&#xff0c;然后创建项目文件夹并初始化 Electron 项目。 1. 安装 Node.js 首先&#xff0c;确保你已经安装了 Node.js 和 npm。你可以在终端中运行以下命令来检查是否已经安装&#xff1a; node -v…

「scipy、eeg」使用python scipy butter filtfilt 分解EEG数据为5个频带和滤波参数选择

使用scipy butter filtfilt 分解EEG数据和滤波参数选择 【目录】 EEG数据频带和滤波参数滤波类型及示例Pyhton 代码实现 一、EEG数据频带和滤波参数 二、滤波类型 低通滤波&#xff08;lowpass)高通滤波&#xff08;highpass&#xff09;带通滤波&#xff08;bandpass&…

网络传输层TCP协议

传输层TCP协议 1. TCP协议介绍 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一个要对数据的传输进行详细控制的传输层协议。 TCP 与 UDP 的不同&#xff0c;在于TCP是有连接、可靠、面向字节流的。具体来说&#xff0c;TCP设置了一大…