【前端7*】表格-表单2(弹窗在子组件)父子组件调用 vue element-ui

news2024/12/23 15:09:50

vue element-ui 中表单弹框的使用

  • 写在最前面
  • 一、子组件 HelloWorld.vue
    • 1. 弹窗部分、将 visible 传值给父组件
    • 2.表单的 ruleForm 校验方法
    • 3.表单确认方法
    • 4. 提交确认方法:handleSummit
    • 5.表单渲染
  • 二、父组件 HomeView.vue
    • 1.新增按钮、查看和编辑
    • 2.引用子组件弹窗
    • 3.import 子组件
  • 三、页面显示模式(编辑和查看)逻辑
    • 1.子组件接受父组件传值(type:编辑、查看)
    • 2.父组件给子组件传值
    • 3.更新数据
  • 四、小结


请添加图片描述

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

写在最前面

姊妹篇:
【前端5*】表格-表单1(弹窗在父组件)父子组件调用 vue element-ui
代码部分:【前端6*】表格-表单2(弹窗在父组件)父子组件调用 vue element-ui

全部代码:
我用夸克网盘分享了「form-table-demo (2).zip」,点击链接即可保存。
链接:https://pan.quark.cn/s/7cee269b3221
提取码:hXeC

感谢神仙实习单位,老师手把手教O(∩_∩)O~感谢侃哥的讲解,感谢雅欣的讲解录制。

后面对着视频又看了一遍,然后重新写了一遍,梳理流程加快后面代码速度。

两种区别,弹窗是否多次调用

按住 Alt,可以同时选中三个字段,然后 c
同样,按住 Alt,同时选中三个字段,然后 v

梳理后代码,主要为:
(子组件)E:\ui\参考代码\demo-new\src\components\HelloWorld.vue
(父组件)E:\ui\参考代码\demo-new\src\views\HomeView.vue

在这里插入图片描述

在本系列的第二篇文章中,我们将梳理如何在Vue.js中使用Element-UI实现表格与表单的结合:如何在父组件中引用子组件,子组件中通过按钮触发弹窗表单。
这种设计模式在实际项目中非常常见,特别是在需要对数据进行增删改查操作时,能够有效地提升用户体验和代码可维护性。

本文将分为以下几个部分:

1、环境配置与基础介绍
2、父子组件的结构与数据传递
3、使用Element-UI实现弹窗与表单
4、完整示例代码与详细解析(后面一篇博客)

准备好了吗?让我们开始吧!

一、子组件 HelloWorld.vue

1. 弹窗部分、将 visible 传值给父组件

通过:visible.sync 传值给 el-dialog

<el-dialog
      title="子组件"
      :visible.sync="dialogVisible"
      width="30%"
      :before-close="handleClose"
    >

将 visible 传值给父组件

<script>
export default {
  name: "HelloWorld",
  props: {
    visible: {
      type: Boolean,
      default: false,
    },
  },

记得在 data 中初始化 dialogVisible

data() {
    return {
      type: "",
      dialogVisible: false,

2.表单的 ruleForm 校验方法

<el-form
        ref="ruleForm"
        label-width="100px"
        class="demo-ruleForm"
        inline
        :model="ruleForm"
        :rules="rules"
        :disabled="type === 'view'"
      >
        <el-form-item label="日期" prop="date">
          <el-input v-model="ruleForm.date"></el-input>
        </el-form-item>

然后在 data 中定义方法

data() {
    return {
      type: "",
      dialogVisible: false,
      ruleForm: {
        name: "",
        date: "",
        province: "",
      },
      rules: {
        date: [{ required: true, message: "请输入日期", trigger: "blur" }],
        name: [
          { required: true, message: "请输入姓名", trigger: "blur" },
          { min: 3, max: 5, message: "长度在 3 到 5 个字符", trigger: "blur" },
        ],
        province: [
          { required: true, message: "请输入省份", trigger: "blur" },
          { min: 3, max: 5, message: "长度在 3 到 5 个字符", trigger: "blur" },
        ],
      },
    };
  },

3.表单确认方法

<span slot="footer" class="dialog-footer">
        <el-button @click="handleClose">取 消</el-button>
        <el-button type="primary" @click="handleSubmit">确 定</el-button>
      </span>

4. 提交确认方法:handleSummit

提交确定:自定义校验规则

弹窗关闭时,写表单清空

取消、确认、X,关闭方法一样

handleClose() {
      this.dialogVisible = false;
      //清空ruleForm
      this.ruleForm = {};
    },

有方法写方法,不要重复写 dis 显示

handleSubmit() {
      this.$refs["ruleForm"].validate((valid) => {
        if (valid) {
          this.$emit("submit", this.ruleForm);
          this.handleClose();
        } else {
          return false;
        }
      });
    },

5.表单渲染

(不需要)重新渲染组件(key++):

因为,tableData 有父组件定义引用,并且子组件传值给父组件,所以会直接显示

二、父组件 HomeView.vue

1.新增按钮、查看和编辑

<el-button icon="plus" @click="handleAdd">新增</el-button>
<el-table-column fixed="right" label="操作" width="100">
        <template slot-scope="scope">
          <el-button @click="handleView(scope.row)" type="text" size="small">
            查看
          </el-button>
          <el-button type="text" size="small" @click="handleEdit(scope.row)">
            编辑
          </el-button>
        </template>
      </el-table-column>

2.引用子组件弹窗

<HelloWorld ref="childRef" @submit="handleSuccess"></HelloWorld>

3.import 子组件

<script>
import HelloWorld from "../components/HelloWorld.vue";
export default {
  components: {
    HelloWorld,
  },

三、页面显示模式(编辑和查看)逻辑

1.子组件接受父组件传值(type:编辑、查看)

不能直接写 disable=“”,要先定义 type 的 data 和 methods

init(type,row)

[init] 方法的作用:根据不同的操作类型(查看、编辑或添加),初始化组件的状态,并准备显示相关的 UI 元素。

[init] 接收两个参数:[type][row]
[type] 参数用于指定操作的类型,而 [row] 参数包含了一些与当前操作相关的数据。

代码中注释掉的一行 // this.ruleForm = row; 展示了一个未启用的逻辑,即直接将 row 的值赋给 ruleForm 属性。然而,实际使用的逻辑更加细致。它通过一个 if 语句检查 type 属性的值是否为 viewedit。如果是,说明当前操作是查看或编辑,此时需要将 row 的数据赋给 ruleForm 属性以便使用。
这里使用了 JavaScript 的解构赋值语法 { ...row },这意味着创建了 row 的一个浅拷贝并赋值给 ruleForm,而不是直接使用 row 对象,这样做可以避免直接修改到原始的 row 数据。

methods: {
    init(type, row) {
      console.log(type);
      this.type = type;
      console.log("type", this.type);
      // this.ruleForm = row;
      // 当type为view或edit时,将row的值赋给ruleForm;当type为add时,不读row的值
      if (["view", "edit"].includes(this.type)) {
        // 解构,只拿ruleForm的row部分
        this.ruleForm = { ...row };
      }
      this.dialogVisible = true;
    },

先打印 row 参数,看传值成功没

在这里插入图片描述

然后把 row 在 init 函数中给他

子组件中需要传值 handleview(scope .row)

2.父组件给子组件传值

this.$refs["childRef"].init("add", {});

它调用了 childRef 组件实例上的 init 方法,并传递了两个参数:一个字符串 "add" 和一个空对象 {}

methods: {
    /**弹窗在子组件 */
    handleAdd() {
      console.log(this.$refs["childRef"]);
      this.$refs["childRef"].init("add", {});
      console.log("this.$refs", this.$refs);
    },
    handleEdit(row) {
      this.$refs["childRef"].init("edit", row);
    },
    handleView(row) {
      this.$refs["childRef"].init("view", row);
    },
    handleSuccess(data) {
      console.log("data", data);
      this.tableData.push(data);
    },
  },

在 Vue 中,this.$refs 是一个对象,其中包含了模板中所有带有 ref 属性的 DOM 元素或组件实例。当你在一个组件上使用 ref 属性时,例如 <ChildComponent ref="childRef" />,你可以通过 this.$refs.childRef 访问到这个组件实例。

这里的 .init 是一个方法,它需要在 childRef 组件内部被定义。这个方法的具体作用取决于 childRef 组件内部如何实现它。通常,这种方法用于初始化组件的状态或执行一些准备工作,参数用于指定初始化的类型或传递初始化所需的数据。

例如,如果 childRef 组件是一个弹窗组件,init 方法可能用于设置弹窗的模式(如添加模式)和初始化弹窗内的数据。

// 在 ChildComponent 组件中
methods: {
init(mode, data) {
// 根据 mode 和 data 参数初始化组件
}
}

这种模式允许父组件控制子组件的行为,通过直接调用子组件的方法来实现。

3.更新数据

两种方法:

①拿到当前行的索引index,传过去,再传回来,改数组的值

②用init,但是需要对vue生命周期比较熟悉

四、小结

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


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

欢迎大家添加好友交流。

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

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

相关文章

【Linux网络】select{理解认识select/select与多线程多进程/认识select函数/使用select开发并发echo服务器}

文章目录 0.理解/认识回顾回调函数select/pollread与直接使用 read 的效率差异 1.认识selectselect/多线程&#xff08;Multi-threading&#xff09;/多进程&#xff08;Multi-processing&#xff09;select函数socket就绪条件select的特点总结 2.select下echo服务器封装套接字…

花开半夏,我决意仿一款答题小程序

不是清凉罢挥扇&#xff0c;自缘手倦歇些时。 ——杨万里&#xff08;宋&#xff09; 走过春的绚烂&#xff0c;路过初夏的清凉&#xff0c;我们迎来了炎炎夏日。蛙声阵阵&#xff0c;蝉鸣声声&#xff0c;稻花如白练&#xff0c;荷花别样红。 花开半夏&#xff0c;我决意仿一款…

C# 各版本语法新功能汇总

C# 8.0 以后 官网 C# 7.3 》》in C# 7.2 》》 命名参数、具名参数 》》》 条件 ref 表达式 C# 7.1 》》 default 运算符 default 在C#7.1中得到了改进&#xff0c;不再需要default&#xff08;T&#xff09;了 //变量赋值C#7.0 var s "字符串"; s default(s…

【常见开源库的二次开发】基于openssl的加密与解密——MD5算法源码解析(六)

一、MD5算法分析 &#xff1a; 1.1 关于MD5 “消息摘要”是指MD5&#xff08;Message Digest Algorithm 5&#xff09;算法。MD5是一种广泛使用的密码散列函数&#xff0c;它可以生成一个128位&#xff08;16字节&#xff09;的散列值。 RFC 1321: MD5由Ronald Rivest在1992…

某大型企业产品研发管理体系构建指南解决方案

获取完整PPT见下图 更多有关华为研发管理/IPD、MBSE、PLM、ERP、MES、数据治理、数字样机等方面免费解决方案、资料获取&#xff0c;请见下图

MySQL学习记录 —— 이십사 MySQL连接层和服务层

文章目录 1、整体架构2、连接层1、网络端口和连接管理线程2、客户端连接线程管理3、连接量管理 3、服务层1、服务管理和公共组件2、NoSQL接口与SQL接口以及Parser语法分析器3、优化器和缓存 4、SQL语句执行流程 1、整体架构 MySQL8.0服务器是由连接池、服务管理工具和公共组件…

BIOMOD2 物种分布模拟教程

原文链接&#xff1a;BIOMOD2 物种分布模拟教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247609373&idx5&sn492e7597314a5f9e358c35e4780b275f&chksmfa826dfacdf5e4ecf8ac06bdeba5469b31650bdbefbc8fb88b79c0f332714c453a4cc058d29f&token155…

Linux系统部署MySQL数据库

1.Linux插入光盘&#xff0c;使用df-h获取光盘信息&#xff0c;默认/dev/sr0文件为光盘文件 使用命令 mount -o ro /dev/sr0 /media进行手动挂载 mount -o ro /dev/sr0 /media 2.进入cd /etc/yum.repos.d目录 编辑配置yum库&#xff0c;编辑vim yum.repos [BaseOS] nameba…

【postgresql】pg_dump备份数据库

pg_dump 介绍 pg_dump 是一个用于备份 PostgreSQL 数据库的实用工具。它可以将数据库的内容导出为一个 SQL 脚本文件或其他格式的文件&#xff0c;以便在需要时进行恢复或迁移。 基本用法 pg_dump [选项] [数据库名] 命令选项 -h 或 --host&#xff1a;指定数据库服务器的主…

Python Linux环境(Centos8)安装minicoda3+jupyterlab

文章目录 安装miniconda安装python环境启动 最近服务器检查&#xff0c;我下面的服务器有漏洞&#xff0c;不得已重装了&#xff0c;正好记录下怎么从零到python写代码。 安装miniconda miniconda是anconda的精简版&#xff0c;就是管理python环境的得力助手。 # 创建一个名…

企业管理必备:学会寻找客户绝佳方法。

无论是日常沟通、工作交流&#xff0c;还是社交娱乐&#xff0c;微信都扮演着重要的角色。而在微信的使用过程中&#xff0c;添加好友是一项基本而重要的操作&#xff0c;但是您真的会添加微信好友吗&#xff1f; 试试这个神器——微信管理系统&#xff0c;下面分享它快速加客…

TDC 5.0:多集群统一纳管,构建一体化大数据云平台

近期&#xff0c;星环科技数据云平台Transwarp Data Cloud&#xff08;简称TDC&#xff09;5.0版本正式发布&#xff0c;TDC5.0架构屏蔽底层多个TDH集群的差异&#xff0c;采用统一操作模式&#xff0c;新增一个多集群抽象与管理层&#xff0c;能够实现多集群网络互通、跨集群资…

数据库管理的艺术(MySQL):DDL、DML、DQL、DCL及TPL的实战应用(上:数据定义与控制)

文章目录 DDL数据定义语言1、创建数据库2、创建表3、修改表结构4、删除5、数据类型 列的约束主键约束&#xff08;primary key&#xff09;唯一约束&#xff08;unique key&#xff09;非空约束检查约束&#xff08;check&#xff09;外键约束&#xff08;foreign key&#xff…

顶顶通呼叫中心中间件-被叫路由、目的地绑定(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-被叫路由、目的地绑定(mod_cti基于FreeSWITCH) 1、配置分机 点击分机 -> 找到你需要设置的分机 ->呼叫路由设置为external&#xff0c;这里需要设置的分机是呼叫的并不是坐席的分机呼叫路由 2、配置拨号方案 点击拨号方案 -> 输入目的地绑定 …

C#实战 | 求解《丘建算经》百鸡问题

谈起古代数学&#xff0c;总会想起古希腊欧几里得的名著《几何原本》。而实际上&#xff0c;中国的《周髀算经》《九章算术》《缉古算经》等同样经典&#xff0c;尤其是《九章算术》&#xff0c;更以其算法实用性闻名世界。 中国古代数学的一些发展成果可谓惊艳&#xff0c;足…

不入耳耳机哪个牌子好用?五款卓越精品,小白必看!

怎么选到一款自己满意的开放式耳机&#xff1f;对于刚接触开放式耳机的朋友们来说&#xff0c;耳机的音质、续航、佩戴舒适度都是需要考虑到的&#xff0c;但是普通人往往很难去全面的了解分析耳机的这些性能配置。不入耳耳机哪个牌子好用&#xff1f;为了帮助大家解决这个难题…

Redis三种常用的缓存读写策略

Cache Aside Pattern&#xff08;旁路缓存模式&#xff09; 现在基本都用这个模式 Cache Aside Pattern 中服务端需要同时维系 db 和 cache&#xff0c;并且是以 db 的结果为准。 读写步骤&#xff1a; 写&#xff1a; 先更新 db&#xff0c;然后直接删除 cache 。 读 : …

PGCCC|【PostgreSQL】PG考证对工作上有什么好处# PG证书

认证 PostgreSQL 考证&#xff08;PostgreSQL Certification&#xff09;在工作上有以下几个好处&#xff1a; 增强专业能力&#xff1a;通过考证&#xff0c;可以系统地学习和掌握 PostgreSQL 数据库的知识和技能&#xff0c;提高自己的专业水平。 提升职业竞争力&#xff1…

Vue.js 生命周期详解:从创建到销毁的全过程

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

leetcode_189. 轮转数组

leetcode_189. 轮转数组 题目描述: 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,…