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

实现通用的表单清空重置功能

目录
  • 第一版单个表单实现功能并一步步优化
  • 公共方法抽离 mixins 混入
  • 终版 form1 和 form2 组件实现

第一版单个表单实现功能并一步步优化

通过一步步代码的优化,实现清空重置功能,尽量做到抽离后,可以直接复用,不需要修改任何变量名

先实现一版,单个表单组件的清空和重置功能,此时 form1 组件可以实现parent.vue父组件中调用 form1 和 form2

<template><div><form1 /><hr /><form2 /></div>
</template>
<script>import form1 from "@/components/form1.vue";import form2 from "@/components/form2.vue";export default {components: {form1,form2,},};
</script>

form1.vue

<template><div>用户名:<input type="text" v-model="form1.username" /> 昵称:<inputtype="text"v-model="form1.nickname"/><button @click="clean">清空</button><button @click="recover">重置</button></div>
</template>
<script>export default {created() {// 模拟发送请求 更改数据setTimeout(() => {this.form1 = { username: "admin", nickname: "echo" };this.original = JSON.parse(JSON.stringify(this.$data)); // 备份数据}, 1000);},data() {return {form1: { username: "", nickname: "" },};},methods: {clean() {// 最容易想到的实现 1. 属性名固定不利于复用和维护//   this.form1 = {//     username: "",//     nickname: "",//   };//   框架提供了this.$option 可以获取到data中定义的属性//   this.form1 = this.$options.data().form1; // 进阶:2. 可以做到清空,但不建议,避免直接操作自定义的属性,便于方法抽离和复用//   this.$data = this.$options.data(); // 报错:避免修改根实例的data属性的指向,可以通过覆盖属性来替换Object.assign(this.$data, this.$options.data()); // 最终 3. 使用覆盖属性,而不是直接改变对象的指向},recover() {//   this.form1 = JSON.parse(JSON.stringify(this.original)); // 最容易想到的实现 1. 避免直接操作自定义的属性//   this.$data = JSON.parse(JSON.stringify(this.original)); // error 不能修改根实例的data属性的指向Object.assign(this.$data, JSON.parse(JSON.stringify(this.original))); // 最终 2. 使用覆盖属性,},},};
</script>

公共方法抽离 mixins 混入

如果 form2 中,同样想要实现 form1 中的清空和重置功能,就可以将公共的部分抽取成mixins进行混入

抽离的公共方法文件formOperation.js,(此文件中取消了优化过程和注释)

export default {methods: {save() {this.original = JSON.parse(JSON.stringify(this.$data));},clean() {Object.assign(this.$data, this.$options.data());},recover() {Object.assign(this.$data, JSON.parse(JSON.stringify(this.original)));},},
};

终版 form1 和 form2 组件实现

此时 form1 中的代码简化为:

<template><div>用户名:<input type="text" v-model="form1.username" /> 昵称:<inputtype="text"v-model="form1.nickname"/><button @click="clean">清空</button><button @click="recover">重置</button></div>
</template>
<script>import formOperation from "../mixins/formOperation";export default {mixins: [formOperation],created() {setTimeout(() => {this.form1 = { username: "admin", nickname: "echo" };this.save();}, 1000);},data() {return {form1: { username: "", nickname: "" },};},};
</script>

此时 form2 中的代码简化为:其中表单数据中的属性名可以随意定义,而抽取的公共方法,不需要进行任务的修改,同样可以实现上述功能

<template><div>用户名:<input type="text" v-model="form2.a" /> 昵称:<inputtype="text"v-model="form2.b"/><button @click="clean">清空</button><button @click="recover">重置</button></div>
</template>
<script>import formOperation from "../mixins/formOperation";export default {mixins: [formOperation],created() {setTimeout(() => {this.form2 = { a: "test", b: "yya" };this.save();}, 1000);},data() {return {form2: { a: "", b: "" },};},};
</script>

相关文章:

实现通用的表单清空重置功能

目录 第一版单个表单实现功能并一步步优化公共方法抽离 mixins 混入终版 form1 和 form2 组件实现 第一版单个表单实现功能并一步步优化 通过一步步代码的优化&#xff0c;实现清空重置功能&#xff0c;尽量做到抽离后&#xff0c;可以直接复用&#xff0c;不需要修改任何变量名…...

代码随想录 - Day31 - 回溯:组合问题

代码随想录 - Day31 - 回溯&#xff1a;组合问题 77. 组合 最容易想到的&#xff1a;k层for循环。 显然不能写那么多层for循环&#xff0c;所以该方法pass 使用回溯法&#xff1a; 用递归解决嵌套层数的问题 n相当于树的宽度&#xff0c;k相当于树的深度。 找到最深处的叶子节…...

git文件夹内容详解

.git文件夹是Git版本控制系统在项目根目录下创建的隐藏文件夹&#xff0c;包含了Git仓库的所有相关信息。如下是.git文件夹中常见的一些内容及其作用&#xff1a; HEAD&#xff1a;指向当前所在的分支&#xff08;或者是一个特定的提交&#xff09;。 branches&#xff1a;存储…...

MVC模式分层练习

新建库 新建表 插入点数据 先不用MVC模式写功能,来看下缺点是什么 新建一个空项目 选项项目使用的JDK 自己的IDEA总是要重启下 新建模块 因maven还没教 添加框架支持 添加后项目多了这些 添加些必要依赖 这里注意下,如果导入jar包不对可以重新导入下或者是jar包本身出了问…...

ORB-SLAM2算法12之单目初始化Initializer

文章目录 0 引言1 单目初始化Initializer1.1 构造函数1.2 成员函数1.2.1 Initialize1.2.2 FindHomography1.2.3 FindFundamental1.2.4 ReconstructH1.2.5 ReconstructF 2 总结 0 引言 ORB-SLAM2算法7详细了解了System主类和多线程、ORB-SLAM2学习笔记8详细了解了图像特征点提取…...

固定参数-以京东sign逆向为例

前言 在逆向过程中&#xff0c;需要结合frida或unidbg&#xff0c;对整个算法进行一步步的分析&#xff0c;有时候我们分析完某一部分&#xff0c;想要继续往下分析时&#xff0c;需要重新发起请求&#xff0c;这时候的参数往往都已经改变了&#xff0c;这样会打断我们的节奏&a…...

在macOS 上执行sed命令报错问题

错误描述 在macOS 上执行sed命令&#xff0c;报错 sed -i s/book/books/g demo.txt sed: 1: extra characters at the end of d command解决方法 原因是mac的和linux写法不一样 linux sed -i s/book/books/g demo.txtmac sed -i s/book/books/g demo.txt...

ARP欺骗

ARP协议&#xff1a; 地址解析协议&#xff0c;将IP地址转换为对应的mac地址&#xff0c;属链路层协议 ip地址&#xff1a; ip地址本义是为互联网上的每一个网络和每一台主机配置一个唯一的逻辑地址&#xff0c;它的格式表示为&#xff1a;&#xff08;A.B.C.D&#xff09;。其…...

pip切换下载源(多种国内源)

pip切换下载源 一、pip二、使用步骤1.查看源2.切换源 一、pip pip 是一个现代的&#xff0c;通用的 Python 包管理工具 二、使用步骤 1.查看源 使用以下命令查看当前pip的下载源 pip config list2.切换源 在国内使用官方下载依赖往往速度慢&#xff0c;易出错&#xff0c…...

ARM Cortex-M 的 SP

文章目录 1、栈2、栈操作3、Cortex-M中的栈4、MDK中的SP操作流程5、Micro-Lib的SP差别1. 使用 Micro-Lib2. 未使用 Micro-Lib 在嵌入式开发中&#xff0c;堆栈是一个很基础&#xff0c;同时也是非常重要的名词&#xff0c;堆栈可分为堆 (Heap) 和栈 (Stack) 。 栈(Stack): 一种…...

【原创】鲲鹏ARM构架openEuler操作系统安装Oracle 19c

作者:einyboy 【原创】鲲鹏ARM构架openEuler操作系统安装Oracle 19c | 云非云计算机科学、自然科学技术科谱http://www.nclound.com/index.php/2023/09/03/%E3%80%90%E5%8E%9F%E5%88%9B%E3%80%91%E9%B2%B2%E9%B9%8Farm%E6%9E%84%E6%9E%B6openeuler%E6%93%8D%E4%BD%9C%E7%B3%BB%…...

k8s之存储篇---数据卷-挂载

挂载是指将定义在 Pod 中的数据卷关联到容器&#xff0c;同一个 Pod 中的同一个数据卷可以被挂载到该 Pod 中的多个容器上。 数据卷内子路径 有时候我们需要在同一个 Pod 的不同容器间共享数据卷。使用 volumeMounts.subPath 属性&#xff0c;可以使容器在挂载数据卷时指向数…...

无涯教程-JavaScript - TDIST函数

The TDIST function replaces the T.DIST.2T & T.DIST.RT functions in Excel 2010. 描述 该函数返回学生t分布的百分点(概率)​​,其中数值(x)是t的计算值,将为其计算百分点。 t分布用于小样本数据集的假设检验。使用此函数代替t分布的临界值表。 语法 TDIST(x,deg_fr…...

IP子网的划分

文章目录 一、子网掩码1. 产生背景2. 定义3. 分类 二、VLSM算法1. 得出下列参数2. 计算划分结果3. 举例子计算 三、常见子网划分对应关系四、练习IP编址题目需求解题1. 192.168.1.100/282. 172.16.0.58/263. 25.83.149.222/254. 100.100.243.18/205. 10.100.100.100/10 首先可以…...

弹性盒子的使用

一、定义 弹性盒子是一种用于按照布局元素的一维布局方法&#xff0c;它可以简便、完整、响应式地实现各种页面布局。 容器中存在两条轴&#xff0c;主轴和交叉轴(相当于我们坐标轴的x轴和y轴)。我们可以通过flex-direction来决定主轴的方向。 主轴&#xff08;main axis&am…...

软件测试/测试开发丨Selenium 网页frame与多窗口处理

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27048 一、多窗口处理. 1.1、多窗口简介 点击某些链接&#xff0c;会重新打开⼀个窗⼜&#xff0c;对于这种情况&#xff0c;想在新页⾯上操作&#xff0…...

MySQL高阶语句(三)

一、NULL值 在 SQL 语句使用过程中&#xff0c;经常会碰到 NULL 这几个字符。通常使用 NULL 来表示缺失 的值&#xff0c;也就是在表中该字段是没有值的。如果在创建表时&#xff0c;限制某些字段不为空&#xff0c;则可以使用 NOT NULL 关键字&#xff0c;不使用则默认可以为空…...

链表OJ练习(2)

一、分割链表 题目介绍&#xff1a; 思路&#xff1a;创建两个链表&#xff0c;ghead尾插大于x的节点&#xff0c;lhead尾插小于x的节点。先遍历链表。最后将ghead尾插到lhead后面&#xff0c;将大小链表链接。 我们需要在创建两个链表指针&#xff0c;指向两个链表的头节点&…...

ssh常用操作

ssh常用操作 SSH是一种安全协议&#xff0c;ssh是该协议的客户端程序&#xff0c;openssh-server则是该协议的服务端程序 常用系统都自带了ssh客户端程序&#xff0c;服务端程序则可能要安装 密码远程登陆 前提&#xff1a;服务器安装了openssh-server&#xff0c;未安装时…...

从AD迁移至AAD,看体外诊断领军企业如何用网络准入方案提升内网安全基线

摘要&#xff1a; 某医用电子跨国集团中国分支机构在由AD向AzureAD Global迁移时&#xff0c;创新使用宁盾网络准入&#xff0c;串联起上海、北京、无锡等国内多个职场与海外总部,实现平滑、稳定、全程无感知的无密码认证入网体验&#xff0c;并通过合规基线检查&#xff0c;确…...

Flutter系列文章-Flutter在实际业务中的应用

不同场景下的解决方案 1. 跨平台开发&#xff1a; 在移动应用开发中&#xff0c;面对不同的平台&#xff08;iOS和Android&#xff09;&#xff0c;我们通常需要编写两套不同的代码。而Flutter通过一套代码可以构建适用于多个平台的应用&#xff0c;大大提高了开发效率&#x…...

FPGA | Verilog仿真VHDL文件

当VHDL模块中有Generic块时&#xff0c;应该怎么例化&#xff1f; VHDL模块代码 entity GenericExample isgeneric (DATA_WIDTH : positive : 8; -- 泛型参数&#xff1a;数据宽度ENABLE_FEATURE : boolean : true -- 泛型参数&#xff1a;是否启用特定功能);Port ( clk : …...

微服务--Gatway:网关

routes: - id:order_route(路由唯一 标识&#xff0c;路由到order) uri&#xff1a;http://localhost:8020 #需要转发的地址 #断言规则&#xff08;用于路由规则的匹配&#xff09; predicates: -path/order-serv/** -pathlb://order-service # lb: 使用nacos中的本地…...

Django传递dataframe对象到前端网页

在django前端页面上展示的数据&#xff0c;还是使用django模板自带的语法 方式1 不推荐使用 直接使用 【df.to_html(indexFalse)】 使用to_html他会生成一个最基本的表格没有任何的样式&#xff0c;一点都不好看&#xff0c;如果有需要的话可以自行修改表格的样式&#xff0c;…...

iOS swift5 弹出提示文字(停留1~2s)XHToastSwift

CoderZhuXH/XHToastSwift - github // // XHToast.swift // XHToastSwiftExample // // Created by xiaohui on 16/8/12. // Copyright © 2016年 CoderZhuXH. All rights reserved. // 代码地址:https://github.com/CoderZhuXH/XHToastSwiftimport UIKit/*** Toast…...

Spring Bean 的生命周期,如何被管理的

实例化一个Bean&#xff0c;也就是我们通常说的new 按照Spring上下文对实例化的Bean进行配置&#xff0c;也就是IOC注入 如果这个Bean实现了BeanNameAware接口&#xff0c;会调用它实现的setBeanName(String beanId)方法&#xff0c;此处传递的是Spring配置文件中Bean的ID 如…...

MATLAB算法实战应用案例精讲-【概念篇】量子机器学习

目录 前言 几个高频面试题目 机器学习的方法论 知识储备 机器学习的实现...

【kubernetes】Argo Rollouts -- k8s下的自动化蓝绿部署

蓝绿(Blue-Green)部署简介 在现代软件开发和交付中,确保应用程序的平稳更新和发布对于用户体验和业务连续性至关重要。蓝绿部署是一种备受推崇的部署策略,它允许开发团队在不影响用户的情况下,将新版本的应用程序引入生产环境。 蓝绿部署的核心思想在于维护两个独立的环…...

vue Cesium接入在线地图

Cesium接入在线地图只需在创建时将imageryProvider属性换为在线地图的地址即可。 目录 天地图 OSM地图 ArcGIS 地图 谷歌影像地图 天地图 //矢量服务let imageryProvider new Cesium.WebMapTileServiceImageryProvider({url: "http://t0.tianditu.com/vec_w/wmts?s…...

OBS Studio 30.0 承诺在 Linux 上支持英特尔 QSV,为 DeckLink 提供 HDR 回放功能

导读OBS Studio 30.0 现已推出公开测试版&#xff0c;承诺为这款广受欢迎的免费开源截屏和流媒体应用程序提供多项令人兴奋的新功能&#xff0c;以及大量其他更改和错误修复。 OBS Studio 30.0 承诺在 Linux 上支持英特尔 QSV&#xff08;快速同步视频&#xff09;、WHIP/WebRT…...