【前端4】表单 编辑模式、只读模式:HTML的`readonly`、el-input的v-if=“isEdit“

【前端】表单 编辑模式、只读模式

  • 写在最前面
  • 一、什么是编辑模式与只读模式?
    • 应用场景
    • 编辑模式
    • 只读模式
  • 二、编辑模式的实现例子
    • 只读模式的实现
    • 动态切换模式
      • 使用HTML的readonly属性
      • 使用Vue.js的v-if指令
  • 三、前后端交互 `<template>`代码块
    • 两个字段独立
    • 是否直接与后端接口交互,以及它们的数据变换方法
  • 四、小结


请添加图片描述

🌈你好呀!我是 是Yu欸
🌌 2024每日百字篆刻时光,感谢你的陪伴与支持 ~
🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成长!

写在最前面

在前端开发中,表单(Forms)是用户与应用交互的关键组件。

本文将详细介绍表单的编辑模式和只读模式的定义、实现方法及其应用场景。

在前端开发中,我们可以使用HTML的readonly属性来控制表单元素的只读状态,而在使用Vue.js框架时,可以结合v-if指令来实现表单的编辑和只读切换。

同时,我们使用Vue的数据绑定功能来实现表单数据的同步更新。

在这里插入图片描述

一、什么是编辑模式与只读模式?

应用场景

  1. 用户注册与登录:在用户注册时,表单需要处于编辑模式,允许用户输入信息。而在用户查看个人资料时,可以使用只读模式。
  2. 信息审核:在信息审核页面,审核人员通常只需要查看信息而无需修改,这时可以使用只读模式。
  3. 数据展示:在数据展示页面,如报告或统计信息页面,使用只读模式可以防止误操作。

编辑模式

编辑模式是指表单处于可编辑状态,用户可以输入、修改或删除数据。这种模式通常用于用户需要提交或更新信息的场景,例如注册页面、设置页面等。

只读模式

只读模式是指表单处于不可编辑状态,用户只能查看表单中的数据,而不能对其进行修改。这种模式常用于展示信息的场景,例如查看详情页、审核页面等。

二、编辑模式的实现例子

要实现表单的编辑模式,我们需要使用HTML表单元素,例如<input><textarea><select>等。以下是一个简单的表单编辑模式的示例:

<form>
  <label for="name">Name:</label>
  <input type="text" id="name" name="name">
  
  <label for="email">Email:</label>
  <input type="email" id="email" name="email">
  
  <label for="message">Message:</label>
  <textarea id="message" name="message"></textarea>
  
  <button type="submit">Submit</button>
</form>

在这个示例中,用户可以输入他们的姓名、电子邮件和消息,并通过点击“Submit”按钮提交表单。

只读模式的实现

要实现表单的只读模式,可以使用HTML的readonly属性,使表单元素变为只读状态。以下是一个简单的只读模式的示例:

<form>
  <label for="name">Name:</label>
  <input type="text" id="name" name="name" value="John Doe" readonly>
  
  <label for="email">Email:</label>
  <input type="email" id="email" name="email" value="john.doe@example.com" readonly>
  
  <label for="message">Message:</label>
  <textarea id="message" name="message" readonly>This is a read-only message.</textarea>
</form>

在这个示例中,所有的表单元素都被设置为只读状态,用户无法修改其中的内容。

动态切换模式

在实际应用中,常常需要在编辑模式和只读模式之间动态切换。可以通过JavaScript来实现这一功能。以下是一个示例:

使用HTML的readonly属性

<form id="userForm">
  <label for="name">Name:</label>
  <input type="text" id="name" name="name" value="John Doe">
  
  <label for="email">Email:</label>
  <input type="email" id="email" name="email" value="john.doe@example.com">
  
  <label for="message">Message:</label>
  <textarea id="message" name="message">This is a sample message.</textarea>
  
  <button type="button" id="editButton">Edit</button>
</form>

<script>
  const form = document.getElementById('userForm');
  const editButton = document.getElementById('editButton');

  editButton.addEventListener('click', () => {
    const isReadOnly = form.elements[0].hasAttribute('readonly');
    
    for (let i = 0; i < form.elements.length; i++) {
      form.elements[i].readOnly = !isReadOnly;
    }
    
    editButton.textContent = isReadOnly ? 'Save' : 'Edit';
  });
</script>

在这个示例中,点击“Edit”按钮可以在编辑模式和只读模式之间切换。

使用Vue.js的v-if指令

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Vue.js Editable and Read-Only Form</title>
  <script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
</head>
<body>
  <div id="app">
    <form>
      <label for="name">Name:</label>
      <input v-if="isEdit" type="text" id="name" v-model="name">
      <input v-else type="text" id="name" v-model="name" readonly>

      <label for="email">Email:</label>
      <input v-if="isEdit" type="email" id="email" v-model="email">
      <input v-else type="email" id="email" v-model="email" readonly>

      <label for="message">Message:</label>
      <textarea v-if="isEdit" id="message" v-model="message"></textarea>
      <textarea v-else id="message" v-model="message" readonly></textarea>

      <button type="button" @click="toggleEdit">{{ isEdit ? 'Save' : 'Edit' }}</button>
    </form>
  </div>

  <script>
    new Vue({
      el: '#app',
      data: {
        isEdit: false,
        name: 'John Doe',
        email: 'john.doe@example.com',
        message: 'This is a sample message.'
      },
      methods: {
        toggleEdit() {
          this.isEdit = !this.isEdit;
        }
      }
    });
  </script>
</body>
</html>

三、前后端交互 <template>代码块

注:rowObjpostData 是 Vue 组件中的两个数据对象,都是是父组件表格的。

        <td colspan="4" class="tc">基线关系</td>
        <td colspan="4" class="tc">
          <el-input size="mini" v-if="isEdit" v-model="postData.formula"></el-input>
          <div v-else>{{ rowObj.formula }}</div>
        </td>

这段代码中,rowObj.formulapostData.formula用于不同的上下文和目的:

  1. rowObj.formula:

    • 这是在<div>元素内使用的,当isEditfalse时显示。
    • 它直接显示rowObj对象中formula属性的值。
    • 这通常用于只读模式,即当用户不在编辑状态时,直接展示数据。
  2. postData.formula:

    • 这是在<el-input>元素的v-model属性中使用的,当isEdittrue时。
    • v-model指令创建了一个双向数据绑定在postData对象的formula属性和输入框之间。
    • 这意味着,当用户编辑输入框中的内容时,postData.formula的值会实时更新,反之亦然。
    • 这通常用于编辑模式,允许用户修改formula的值。

rowObj.formula用于展示模式,直接显示数据,
postData.formula用于编辑模式,允许用户修改数据,并通过双向数据绑定同步更新。

两个字段独立

根据propsrowObjpostData是作为独立的属性传入组件的。它们各自维护自己的状态,且默认情况下,它们的值不会直接相互影响。这是因为:

  1. 独立性rowObjpostData作为props传入,通常意味着它们来源于父组件,且作为独立的数据源处理。除非在组件内部或父组件中有明确的逻辑来同步这两个对象的formula属性,否则它们的值不会自动相互影响。

  2. 单向数据流:Vue强调单向数据流,即props的值应该由父组件控制,子组件可以接收并使用props的值,但不应直接修改它们。如果需要基于rowObj.formula的值来更新postData.formula,应该通过事件向父组件通信或使用.sync修饰符、v-model等方式来实现双向绑定或状态同步,但这需要额外的代码实现。

  3. 编辑模式与数据同步:如果有需求在编辑模式下将rowObj.formula的值同步到postData.formula,这通常需要通过特定的逻辑来实现,比如在isEdit变为true时,手动设置postData.formula = rowObj.formula,或者通过监听器(watchers)来实现这种同步。

所以,除非在组件内部或通过父组件有明确的逻辑来同步这两个属性,rowObj.formulapostData.formula的值不会自动相互影响。

是否直接与后端接口交互,以及它们的数据变换方法

通常,与后端接口的交互会在 Vue 组件的 methods 或者 lifecycle hooks(如 created, mounted)中进行。数据变换方法也可能在这些部分定义,或者通过 Vue 的 computed properties 实现。

为了确定 rowObjpostData 是否与后端接口交互,以及它们的数据变换方法,你需要查看以下几个方面的代码:

  1. 查看 Vue 组件的 methods:搜索是否有 AJAX 请求(如使用 axios.get, axios.post 等)来获取或发送数据到后端。
  2. 查看 Vue 组件的 lifecycle hooks:在 createdmounted 钩子中,可能会有调用后端接口的代码。
  3. 查看 computed properties:如果有对 rowObjpostData 进行处理或变换的逻辑,可能会在 computed properties 中定义。
  4. 查看 Vuex store(如果使用):如果项目中使用了 Vuex 来管理状态,那么与后端的交互可能在 actions 中进行,同时 mutations 可能会用于更新 rowObjpostData

由于这些信息需要查看完整的 Vue 组件代码或项目代码才能确定,建议你根据上述提示在你的项目中进行搜索和分析。

四、小结

通过合理地使用这两种模式,可以提升用户体验和应用的易用性。希望本文对你在前端开发中处理表单有所帮助。

如果你有任何疑问或需要进一步的帮助,请在评论区留言。祝你开发顺利!


hello,我是 是Yu欸 。如果你喜欢我的文章,欢迎三连给我鼓励和支持:👍点赞 📁 关注 💬评论,我会给大家带来更多有用有趣的文章。
原文链接 👉 ,⚡️更新更及时。

欢迎大家添加好友交流。

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

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

相关文章

bash: ip: command not found

输入&#xff1a; ip addr 报错&#xff1a; bash: ip: command not found 报错解释&#xff1a; 这个错误表明在Docker容器中尝试执行ip addr命令时&#xff0c;找不到ip命令。这通常意味着iproute2包没有在容器的Linux发行版中安装或者没有正确地设置在容器的环境变量PA…

HackQuest介绍 web3 学习平台

HackQuest 官网地址&#xff1a; https://www.hackquest.io/zh HackQuest是一个专注于Web3技术教育的在线学习平台&#xff0c;旨在帮助全球开发者掌握区块链、加密货币和去中心化应用&#xff08;DApps&#xff09;领域的最新技能。该平台汇聚了超过14000名活跃开发者&#…

PyMongo Sort 操作:提升你的数据查询效率

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

通过Bugly上报的日志查找崩溃闪退原因

第一步&#xff0c;解析堆栈信息 在bugly上收集到的信息是这样的 0x000000010542e46c 0x0000000104db4000 6792300 OS应用发生崩溃时&#xff0c;系统会生成一份崩溃日志&#xff0c;这份日志中包含了崩溃时的堆栈信息&#xff0c;但这些堆栈信息并非直接指向源代码&#x…

1143 多少个Fibonacci数

首先&#xff0c;我们需要生成一个Fibonacci数列&#xff0c;直到其值超过10^100。由于Fibonacci数列的性质&#xff0c;我们知道这个数列的长度不会超过500。 然后&#xff0c;对于每一对输入的a和b&#xff0c;我们在生成的Fibonacci数列中查找在a和b之间的数的个数。这可以…

JVM 内存介绍

本文主要介绍&#xff1a; JVM 内存分哪几个区&#xff0c;每个区的作用是什么 备注: 橙色:堆 和 方法区 &#xff0c;属于jvm公有部分,可以进行调优 灰色:java栈,本地方法栈和计数器 属于jvm的私有部分,不可进行调优 一个对象从创建到被回收的过程是怎样的? Personpnew Perso…

SpringBoot系列:通过AOP+注解优雅实现操作日志记录

文章目录 前言一、简介1.1 操作日志在企业应用中的重要性1.2 使用AOP和注解实现操作日志记录的好处 二、开发环境三、准备工作3.1 创建操作日志记录表3.2 创建系统日志实体类 四、代码实现4.1 创建业务枚举类4.2 创建日志注解4.3 创建操作状态枚举类4.4 创建IP工具类4.5 创建切…

jvm常用密令、jvm性能优化、jvm性能检测、Java jstat密令使用、Java自带工具、Java jmap使用

1.jps是Java虚拟机的进程状态工具&#xff0c;用于列出正在运行的Java进程 jps命令的使用&#xff1a;cmd打开直接jps 1.1不带参数&#xff1a; jps 默认情况下&#xff0c;列出所有正在运行的 Java 进程的进程 ID 和主类名。 1.2 -l&#xff1a;显示完整的主类名或 JAR 文件…

增值税进项税额转出6大知识点柯桥学会计会计实操做账手把手教学

什么情况下需要进项转出&#xff1f; 转多少&#xff1f; 怎么填报&#xff1f; 小编梳理了一些 关于增值税进项税额转出的常见问题 快来学习吧&#xff01; 哪些情况下进项税额不得从销项税额中抵扣&#xff1f; 1.用于简易计税方法计税项目、免征增值税项目、集体福利或…

ARM 虚拟机FVP环境搭建

ARM Fixed Virtual Platforms (FVPs) 是由 ARM 提供的一系列虚拟化硬件模拟器&#xff0c;用于在物理硬件可用之前开发和测试软件。FVP 模型非常适用于软件开发、验证和性能分析&#xff0c;涵盖了从裸机到操作系统和复杂 SoC 系统的各种应用。 这里以Cortex-M55为例&#xff0…

springcloud使用微服务的搭建

微服务的搭建 1.配置对应信息 Springboot 、springcloud、springcloud alibaba对应关系 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E 2.pom.xml的配置 2.1 总项目pom.xml引入依赖 <parent><groupId>org.sprin…

Linux【文件权限的理解】

1. linux的发展史 首先在学习linux之间&#xff0c;我们要问自己几个问题&#xff0c;linux从哪里来&#xff0c;为什么会出现&#xff0c;它的出现代表着什么。 linux的前身unix Multics 和 UNIX 的起源&#xff1a; Multics 是一个由通用电器公司、贝尔实验室和麻省理工学院…

InterSystems IRIS使用python pyodbc连接 windows环境,odbc驱动安装,DSN配置,数据源配置

一、创建的数据库和数据 SELECT 1SELECT $ZVERSIONCREATE TABLE MyApp.Person ( ID INT PRIMARY KEY, Name VARCHAR(100) NOT NULL, Age INT, Gender CHAR(1) );CREATE TABLE MyApp.Person2 ( ID INT PRIMARY KEY, Name VARCHAR(100) NOT NULL, Age INT, Gender CHA…

AI写作不懂提示词 大象Prompt 保姆级系列教程三

一、提示词的核心价值究竟是啥&#xff1f; 最近跟不少业内朋友探讨这事儿&#xff0c;我觉得&#xff1a;提示词的核心价值在于对方法论的封装以及由此带来的知识传播速度加快。 通俗讲&#xff0c;假如你熟悉的行业里有个厉害的“老师傅”&#xff0c;他在核心业务上有好多心…

XXL-Job:分布式任务调度平台的深入解析

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

买卖股票-vector

121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09; 当天对比当天的&#xff0c;如果符合条件就换&#xff1b; class Solution { public:int maxProfit(vector<int>& prices) {int inf 1e9;int minp inf, maxprofit 0;int n prices.size();for(i…

Docker的数据管理和网络通信

目录 一、Docker 的数据管理 1&#xff0e;数据卷 2&#xff0e;数据卷容器 二、端口映射 三、容器互联&#xff08;使用centos镜像&#xff09; 四、*Docker 镜像的创建 1&#xff0e;基于现有镜像创建 2&#xff0e;基于本地模板创建 3&#xff0e;基于Dockerfile 创…

【postgresql】角色(Role)

PostgreSQL 中&#xff0c;角色&#xff08;Role&#xff09;是一个重要的概念&#xff0c;用于管理数据库的访问权限和用户身份。角色可以被视为用户或组&#xff0c;具体取决于它们的配置方。 角色属性 角色可以具有多种属性&#xff1a; LOGIN&#xff1a;允许角色登录数据…

一个引发openssl崩溃问题案例

1 背景 最近用libevent写了一个https代理功能&#xff0c;在调研的时候&#xff0c;遇到了一个项目用到了本地多个openssl库引发的ssl握手崩溃问题。 2 开发环境 项目库版本号依赖项libeventlibevent-2.1.8-stableopenssl 1.1openssl1.0u / 1.1.1w / 3.3.1...... 3 问题现象…

电脑分区如何合并?简单易行的操作方法!

随着科技的不断发展&#xff0c;电脑已经成为我们日常生活中不可或缺的工具。在使用电脑的过程中&#xff0c;我们有时会对硬盘进行分区&#xff0c;以便更好地管理数据和提高运行效率。然而&#xff0c;随着时间的推移&#xff0c;我们可能会发现分区过多导致管理复杂&#xf…