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

news2024/9/20 20:37:22

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

  • 写在最前面
  • 一、什么是编辑模式与只读模式?
    • 应用场景
    • 编辑模式
    • 只读模式
  • 二、编辑模式的实现例子
    • 只读模式的实现
    • 动态切换模式
      • 使用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.coloradmin.cn/o/1929034.html

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

相关文章

Auto CAD 2020下载安装教程怎么安装如何使用

Auto CAD 2020下载安装教程 下载链接&#xff1a;https://pan.baidu.com/s/16WR6WdkWqn8WnShZHu8S5Q?pwdhdh7 提取码&#xff1a;hdh7 解压后看到这些文件 进入第一个文件夹后看到安装包&#xff0c;如果缺少了第二个文件&#xff0c;先关闭杀毒软件后重新解压即可 进入…

超全整理,数据管理CDMP认证介绍

CDMP认证概述 CDMP&#xff08;Certified Data Management Professional&#xff09;认证&#xff0c;全称数据管理专业人士认证&#xff0c;是由国际数据管理协会&#xff08;DAMA International&#xff09;推出的权威认证。该认证旨在全面评估个人在数据管理和治理领域的专…

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

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

最新PHP自助商城源码,彩虹商城源码

演示效果图 后台效果图 运行环境&#xff1a; Nginx 1.22.1 Mysql5.7 PHP7.4 直接访问域名即可安装 彩虹自助下单系统二次开发 拥有供货商系统 多余模板删除 保留一套商城,两套发卡 源码无后门隐患 已知存在的BUG修复 彩虹商城源码&#xff1a;下载 密码:chsc 免责声明&…

[MySQL][表的增删查改][二][Retrieve][SELECT][WHERE]详细讲解

目录 1.Retrieve1.基本语法2.SELECT列1.全列查询2.查询字段为表达式3.为查询结果指定别名4.结果去重 3.WHERE条件1.比较运算符2.逻辑运算符3.示例 4.结果排序1.基本语法2.示例 5.筛选分页结果 1.Retrieve 1.基本语法 SELECT [DISTINCT] * | {column [, column] ...} [FROM ta…

一个快速可视化Psrfits(search mode)的工具

【ONE】快速可视化Psrfits&#xff08;search mode&#xff09;的工具 此工具可以快速检测和处理数据中的问题或异常&#xff0c;在不损失采样率的情况下帮助查看脉冲的动态谱、脉冲结构。 网址:https://github.com/PersusX/PDDT 基于 pyqtgraph 的交互式查看数据的工具。 P…

Java SE—基本数据类型(详细讲解)

&#x1f4dd;个人主页&#x1f339;&#xff1a;誓则盟约 ⏩收录专栏⏪&#xff1a;Java SE &#x1f921;往期回顾&#x1f921;&#xff1a;Python 神器&#xff1a;wxauto 库——解锁微信自动化的无限可能 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f3…

效能工具:执行 npm start 可直接切换proxy代理UR后直接启动项目

1) 背景: 我们项目是2个前端3个后端的配置。前端和每个后端都有需要调试的接口。 因此经常切换vite.congig.js中的proxy后端代理链接&#xff0c;是挺麻烦的。 于是我研究如何能快速切换后端URL&#xff0c;所幸懒人有懒福&#xff0c;我找到了Inquirer 和 fs&#xff0c; 实…

人员定位管理系统有怎样优势?这4点不可忽视

众所周知&#xff0c;人员定位管理系统是通过物联网和云计算等技术&#xff0c;记录所有员工的基本信息&#xff0c;将员工位置、工作情况、运动轨迹等信息上传给系统&#xff0c;全面记录和直观的展现厂区内所有工作人员的具体情况。 除了能够查看人员位置情况外&#xff0c;人…

【ROS2】中级:URDF-构建一个可移动的机器人模型

目标&#xff1a;学习如何在 URDF 中定义可移动关节。 教程级别&#xff1a;中级 时间&#xff1a;10 分钟 目录 头部 Head 夹爪 Gripper 抓取臂 Gripper Arm其他类型的关节 指定位姿 下一步 在本教程中&#xff0c;我们将修改上一个教程中制作的 R2D2 模型&#xff0c;使其具有…

港股指数实时行情API接口

港股 指数 实时 行情 API接口 # Restful API https://tsanghi.com/api/fin/index/HKG/realtime?token{token}&ticker{ticker}指定指数代码&#xff0c;获取该指数的实时行情&#xff08;开、高、低、收、量&#xff09;。 更新周期&#xff1a;实时。 请求方式&#xff1a…

并查集 ——(快速判断两个元素是否在同一个集合中)

五、并查集 0、并查集概念 并查集&#xff08;Union-Find&#xff09;是一种用于维护元素分组信息的数据结构。它支持以下两种基本操作: 合并(Union)&#xff1a;将两个不同的集合合并为一个集合。查找(Find)&#xff1a;确定某个元素属于哪个集合。 并查集通常用于解决涉及…

【C++题解】1168. 歌唱比赛评分

问题&#xff1a;1168. 歌唱比赛评分 类型&#xff1a;数组找数 题目描述&#xff1a; 四&#xff08;1&#xff09; 班要举行一次歌唱比赛&#xff0c;以选拔更好的苗子参加校的歌唱比赛。评分办法如下&#xff1a;设 N 个评委&#xff0c;打 N 个分数&#xff08; 0≤每个分…

PointCloudLib MLS算法法线估计 C++版本

测试效果 简介 MLS(Moving Least Squares,移动最小二乘法)算法在法线估计中的应用是一种基于局部数据拟合的技术,它通过对点云中每个点的邻域数据进行多项式拟合来估计该点的法线。以下是MLS算法在法线估计中的详细解释: MLS算法的基本原理 MLS算法是一种无网格的曲线和…

生物素-吡啶-叠氮的组成成分与特性

一、基本信息 中文名称&#xff1a;生物素-吡啶-叠氮 英文名称&#xff1a;Biotin Picolyl Azide CAS号&#xff1a;可能因不同供应商或产品而有所不同&#xff0c;但通常会有一个特定的CAS号与之对应。 分子量&#xff1a;根据产品的具体规格&#xff0c;分子量可能有所不同&a…

六西格玛培训:控制图——洞察过程真相的利器

在追求卓越绩效与持续质量改进的征途中&#xff0c;六西格玛无疑是企业不可或缺的导航灯。作为一套严谨而系统的管理方法&#xff0c;六西格玛不仅帮助企业识别并减少过程中的变异与缺陷&#xff0c;还促进了流程的优化与创新。而在这套强大的方法论中&#xff0c;控制图作为核…

创建通用JS公共模块并发布至npm

title: 创建通用JS公共模块并发布至npm tags: UMD rollup verdaccio npm categories: 模块化 概要内容 创建&#xff1a;JS公共模块 打包&#xff1a;使用rollup 打包公共模块 发布&#xff1a;js公共模块至verdaccio平台 发布&#xff1a;js公共模块至npm平台 如何创建JS公共模…

如何开发一个大模型应用

随着人工智能技术的快速发展&#xff0c;大模型应用已成为许多领域的核心竞争力。大模型应用通常指的是基于大规模数据集训练得到的深度学习模型&#xff0c;具有强大的特征表示能力和泛化性能。本文将详细介绍如何开发一个大模型应用&#xff0c;包括模型设计、数据准备、训练…

Synergy键鼠跨屏幕同步

小记 Synergy 在多台计算机之间使用单个键盘和鼠标&#xff0c;使用一台计算机的键盘、鼠标或触控板来控制附近的计算机&#xff0c;并在它们之间无缝工作 支持Windows Mac Linux 和树莓派&#xff0c;解放桌面空间&#xff0c;减少操作复杂性&#xff0c;多屏操作神器没错了 …

PostgreSQL 中如何处理数据的并发插入和唯一约束的冲突解决?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 PostgreSQL 中如何处理数据的并发插入和唯一约束的冲突解决一、并发插入和唯一约束的基本概念&#xf…