5.Vue-在Vue框架中实现Vue的增删改查

题记

        在vue框架中实现vue的增删改查,以下是具体操作流程和代码

编写TestView.vue文件

        TestView.vue文件如下: 

<template>

    <div id="app">

    <h1>学生列表</h1>

    <input type="text" v-model="searchQuery" placeholder="输入姓名进行查询">

    <table>

      <thead>

        <tr>

          <th>姓名</th>

          <th>年龄</th>

          <th>操作</th>

        </tr>

      </thead>

      <tbody>

        <tr v-for="(student, index) in filteredStudents" :key="index">

          <td>{{ student.name }}</td>

          <td>{{ student.age }}</td>

          <td>

            <button @click="editStudent(index)">编辑</button>

            <button @click="deleteStudent(index)">删除</button>

          </td>

        </tr>

      </tbody>

    </table>

    <h2>添加/编辑学生</h2>

    <form @submit.prevent="saveStudent">

      <label>姓名:</label>

      <input type="text" v-model="newStudent.name" required>

      <label>年龄:</label>

      <input type="number" v-model="newStudent.age" required>

      <button type="submit">{{ editingIndex === null ? '添加' : '保存' }}</button>

    </form>

  </div>

</template>

<script>

export default{

    data() {

      return{

        students: [

          { name: 'ng1', age: 18 },

          { name: 'ng2', age: 20 },

          { name: 'ng3', age: 22 }

        ],

        // 还定义了一个newStudent对象,用于存储正在添加或编辑的学生的临时数据

        // editingIndex变量用于记录正在编辑的学生的索引。

        // searchQuery变量用于存储用户输入的查询关键字。

        newStudent: {

          name: '',

          age: ''

        },

        editingIndex: null,

        searchQuery: ''

        }

       

      },

      // 在computed属性中,定义了一个名为filteredStudents的计算属性,

      // 它根据searchQuery的值对students数组进行过滤,

      // 如果searchQuery为空,则返回所有学生信息;否则,返回包含查询关键字的学生信息。

      computed: {

        filteredStudents() {

          if (this.searchQuery === '') {

            return this.students;

          } else {

            //使用Array的filter方法遍历students数组,并对每个学生对象的姓名进行判断

            //使用了箭头函数语法,表示对每个学生对象进行匿名函数的操作。

            //在函数体内部,使用了String的includes方法,

            //判断学生的姓名中是否包含了searchQuery属性的值(即用户输入的查询关键字)。

            //如果包含了,就将该学生对象保留在过滤后的数组中。

            return this.students.filter(student => {

              return student.name.includes(this.searchQuery);

            });

          }

        }

      },

      methods: {

        //saveStudent方法用于保存或更新学生信息。

        //通过判断editingIndex是否为null来确定当前是添加学生还是编辑学生的操作。

        //如果editingIndex为null,表示当前是添加学生的操作,将newStudent对象添加到students数组中。

        //如果editingIndex不为null,表示当前是编辑学生的操作,

        //将newStudent对象替换students数组中对应索引的学生信息。

        //将editingIndex重置为null,表示编辑操作已完成。

        //将newStudent对象重置为空对象,以清空输入框中的内容。

        saveStudent() {

          if (this.editingIndex === null) {

            // 添加学生

            this.students.push({ ...this.newStudent });

          } else {

            // 编辑学生

            this.students[this.editingIndex] = { ...this.newStudent };

            this.editingIndex = null;

          }

          this.newStudent = { name: '', age: '' };

        },

        //editStudent方法用于编辑学生信息。

        //当点击编辑按钮时,传入对应学生的索引作为参数。

        //在方法内部,将该学生的信息复制到newStudent对象中,以便在表单中显示出来。

        //同时,将editingIndex设置为该学生的索引,以标记当前正在编辑的学生。

        editStudent(index) {

          this.newStudent = { ...this.students[index] };

          this.editingIndex = index;

        },

        //在方法内部,使用splice方法从students数组中删除对应索引的学生信息。

        deleteStudent(index) {

          this.students.splice(index, 1);

        }

      }

}

</script>

<template><div id="app"><h1>学生列表</h1><input type="text" v-model="searchQuery" placeholder="输入姓名进行查询"><table><thead><tr><th>姓名</th><th>年龄</th><th>操作</th></tr></thead><tbody><tr v-for="(student, index) in filteredStudents" :key="index"><td>{{ student.name }}</td><td>{{ student.age }}</td><td><button @click="editStudent(index)">编辑</button><button @click="deleteStudent(index)">删除</button></td></tr></tbody></table><h2>添加/编辑学生</h2><form @submit.prevent="saveStudent"><label>姓名:</label><input type="text" v-model="newStudent.name" required><label>年龄:</label><input type="number" v-model="newStudent.age" required><button type="submit">{{ editingIndex === null ? '添加' : '保存' }}</button></form></div></template>
<script>
export default{data() {return{students: [{ name: 'ng1', age: 18 },{ name: 'ng2', age: 20 },{ name: 'ng3', age: 22 }],// 还定义了一个newStudent对象,用于存储正在添加或编辑的学生的临时数据// editingIndex变量用于记录正在编辑的学生的索引。// searchQuery变量用于存储用户输入的查询关键字。newStudent: {name: '',age: ''},editingIndex: null,searchQuery: ''}},// 在computed属性中,定义了一个名为filteredStudents的计算属性,// 它根据searchQuery的值对students数组进行过滤,// 如果searchQuery为空,则返回所有学生信息;否则,返回包含查询关键字的学生信息。computed: {filteredStudents() {if (this.searchQuery === '') {return this.students;} else {//使用Array的filter方法遍历students数组,并对每个学生对象的姓名进行判断//使用了箭头函数语法,表示对每个学生对象进行匿名函数的操作。//在函数体内部,使用了String的includes方法,//判断学生的姓名中是否包含了searchQuery属性的值(即用户输入的查询关键字)。//如果包含了,就将该学生对象保留在过滤后的数组中。return this.students.filter(student => {return student.name.includes(this.searchQuery);});}}},methods: {//saveStudent方法用于保存或更新学生信息。//通过判断editingIndex是否为null来确定当前是添加学生还是编辑学生的操作。//如果editingIndex为null,表示当前是添加学生的操作,将newStudent对象添加到students数组中。//如果editingIndex不为null,表示当前是编辑学生的操作,//将newStudent对象替换students数组中对应索引的学生信息。//将editingIndex重置为null,表示编辑操作已完成。//将newStudent对象重置为空对象,以清空输入框中的内容。saveStudent() {if (this.editingIndex === null) {// 添加学生this.students.push({ ...this.newStudent });} else {// 编辑学生this.students[this.editingIndex] = { ...this.newStudent };this.editingIndex = null;}this.newStudent = { name: '', age: '' };},//editStudent方法用于编辑学生信息。//当点击编辑按钮时,传入对应学生的索引作为参数。//在方法内部,将该学生的信息复制到newStudent对象中,以便在表单中显示出来。//同时,将editingIndex设置为该学生的索引,以标记当前正在编辑的学生。editStudent(index) {this.newStudent = { ...this.students[index] };this.editingIndex = index;},//在方法内部,使用splice方法从students数组中删除对应索引的学生信息。deleteStudent(index) {this.students.splice(index, 1);}}
}
</script>

执行程序

        注意:以上的代码需要在vue框架中运行,且是vue3的框架 

 展示图

 

后记 

        觉得有用可以点赞或收藏! 

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

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

相关文章

使用 VS Code 作为 VC++ 6.0 的编辑器

使用 VS Code 作为 VC 6.0 的编辑器 由于一些众所周知的原因&#xff0c;我们不得不使用经典&#xff08;过时&#xff09;的比我们年龄还大的已有 25 年历史的 VC 6.0 来学习 C 语言。而对于现在来说&#xff0c;这个经典的 IDE 过于简陋&#xff0c;并且早已不兼容新的操作系…

KNN算法

文章目录 释义欧氏距离simple——KNNsklearn——KNN 释义 近朱者赤近墨者黑----从训练数据集中找出和待预测样本最接近的K个样本 对于分类问题&#xff0c;我们使用了多数表决法来判断目标对象的类别。 对于回归问题&#xff0c;我们使用了平均值法来判断目标对象的数值 如上…

【YOLO】语义分割和实例分割(四)

0 YOLO系列笔记 【YOLO】朴实无华的yolov5环境配置&#xff08;一&#xff09; 【YOLO】yolov5训练自己的数据集&#xff08;二&#xff09; 【YOLO】目标识别模型的导出和opencv部署&#xff08;三&#xff09; 1 前言 在之前的实践过程中&#xff0c;总结了如何使用YOLOv…

Vue3响应式原理初探

vue3响应式原理初探 为什么要使用proxy取代defineProperty使用proxy如何完成依赖收集呢&#xff1f; 为什么要使用proxy取代defineProperty 原因1&#xff1a;defineproperty无法检测到原本不存在的属性。打个&#x1f330; new Vue({data(){return {name:wxs,age:25}}})在vue…

电脑版便签软件下载用哪个?

在面对每天繁忙的工作日程&#xff0c;电脑是许多上班族不可或缺的工作助手&#xff0c;而一款得心应手的电脑便签软件&#xff0c;更是可以帮助大家记录、提醒、督促各项任务按时完成的得力助手。那么&#xff0c;究竟在众多的电脑便签软。件中&#xff0c;哪一位能够真正成为…

Ubuntu:Arduino IDE 开发环境配置【保姆级】

物联网开发学习笔记——目录索引 本章主要介绍在Ubuntu系统搭建Arduino IDE 开发环境&#xff0c;windows系统请移步&#xff1a;Windows&#xff1a;Arduino IDE 开发环境配置【保姆级】 参考官网&#xff1a;Arduino - Home 有关更多详细信息&#xff0c;请参阅 Arduino I…

SpringCloud微服务(注册发现Nacos、服务调用SSM、网关gateway)项目环境搭建(项目概况,SSM细节总结)

目录 1.nacos环境搭建nacos安装 2.项目主体结构6.2)表结构分析6.4)**运营端微服务搭建**6.4)登录功能实现 7)接口工具postman、swagger、knife4j7.1)postman7.2)swagger7.3)knife4j 8)网关9)前端集成9.1)前端项目部署思路9.2)配置nginx 1.nacos环境搭建 nacos安装 ①&#xf…

LDAP用户密码自服务平台搭建

源码地址&#xff1a;https://github.com/ltb-project/self-service-password 官方文档 &#xff1a;https://self-service-password.readthedocs.io/en/latest/ 1.创建配置文件 mkdir -p /opt/ssp cd /opt/ssp vim ssp.conf.php2.在ssp.conf.php其中输入如下配置选项&#…

ELK日志分析系统的详细介绍与部署

文章目录 1. ELK的概述1.1 简介1.2 使用ELK的理由1.3 ELK的主要组件1.3.1 Elasticsearch1.3.2 Kibana1.3.3 Logstash1.3.3.1 简介1.3.3.2 Logstash常用相关命令选项 1.3.3.3 Logstash 的输入和输出流1.3.4 Logstash的相关配置文件 1.3.4 Filebeat1.3.4.1 简介1.3.4.2 filebeat …

数学分析:傅里叶级数

卓里奇书好的一点就是&#xff0c;不是直接引出公式&#xff0c;而是告诉你理由。先引出正交的概念&#xff0c;然后在函数空间中&#xff0c;也有正交&#xff0c;只不过是无限维的空间。 这里要注意&#xff0c;明确说明了是有限个。 在函数空间里面&#xff0c;内积是指进行…

studio one6值不值得下载?好用吗

零基础学混音&#xff0c;持之以恒才能有所收获。首先要明确自己的学习目标&#xff0c;然后选择适合自己的教程。这套教程适用于后期制作和直播&#xff0c;同样适用。我切换到了桌面屏幕。 在这个基础上运行&#xff0c;它提供了适合零基础的模板&#xff0c;适合直播唱歌或…

【iOS】使用单例封装通过AFNetworking实现的网络请求

这里写目录标题 前言单例封装网络请求1. 首先创建一个继承于NSObject的单例类&#xff0c;笔者这里以Manager对单例类进行命名&#xff0c;然后声明并实现单例类的初始化方法2.实现完单例的创建方法后我们即可通过AFNetworking中的GET方法进行网络请求3.在Controller文件中创建…

Electron之集成vue+vite开发桌面程序

在electron中集成vue开发桌面程序 使用我们之前创建的electron项目 创建vue 项目 命令行进入electron根目录 执行下面命令 npm create vitelatest vue -- --template vue这样就创建了一个vue项目&#xff0c;文件名是vue&#xff0c;命令行进入vue下&#xff0c;执行下面命…

Camera BSP之GPIO/I2C/PMIC简介

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、GPIO介绍二、IC 总线概括三、PMIC 概括四、思考 一、GPIO介绍 GPIO&#xff1a;General Purpose Input Output &#xff08;通用输入/输出&#xf…

互联网Java工程师面试题·Java 总结篇·第八弹

目录 72、用 Java 的套接字编程实现一个多线程的回显&#xff08;echo&#xff09;服务器。 73、XML 文档定义有几种形式&#xff1f;它们之间有何本质区别&#xff1f;解析XML 文档有哪几种方式&#xff1f; 74、你在项目中哪些地方用到了 XML&#xff1f; 72、用 Java 的套…

为网站配置SSL

HTTPS &#xff08;全称&#xff1a;Hyper Text Transfer Protocol over SecureSocket Layer&#xff09;&#xff0c;是以安全为目标的 HTTP 通道&#xff0c;在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS 在HTTP 的基础下加入SSL 层&#xff0c;HTTPS…

【AI视野·今日Robot 机器人论文速览 第五十五期】Mon, 16 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Mon, 16 Oct 2023 Totally 27 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;***AcTExplore, 对于未知物体的主动触觉感知。基于强化学习自动探索物体的表面形貌&#xff0c;增量式重建。(from 马里兰…

uni-app通过 vuedraggable 创建上下拖动排序组件

我们右键项目 选择 使用命令行窗口打开所在目录 然后 在终端中输入 npm install vuedraggable --save导入 vuedraggable 然后组件编写代码如下 <template><view class"container"><draggable v-model"list" :options"dragOptions&…

ios设备管理软件iMazing 2.17.11官方中文版新增功能介绍

iMazing 2.17.11官方中文版(ios设备管理软件)是一款管理苹果设备的软件&#xff0c; Windows 平台上的一款帮助用户管理 IOS 手机的应用程序&#xff0c;软件功能非常强大&#xff0c;界面简洁明晰、操作方便快捷&#xff0c;设计得非常人性化。iMazing官方版与苹果设备连接后&…

Chrome 115之后的版本,安装和使用chromedriver

在Python中使用selenium 时报如下错误&#xff1a; 1. 老版本chrome对应的chromedriver 下载地址&#xff1a;CNPM Binaries Mirror 2. 新版本chrome对应的chromedriver 下载地址&#xff1a;Chrome for Testing availability