【vue2父组件调用子组件方法之slot的使用】

news2024/12/26 12:41:58

父组件调用子组件方法之slot的使用

具体功能需求:

一个页面,点击按钮,打开一个弹窗。弹窗有自定义表单和公共表单,提交的时候要获取两个表单的数据以及复显表单数据
为什么使用插槽了,因为我需要在弹窗中复用公共表单,而自定义表单是不固定的,所以需要动态加载。

1、 实现方式 直接通过插槽的 this.$slots 来获取子组件的方法

注意:使用的ui组件库是iview

页面 index.vue

<template >
  <div>
    <Button type="primary" @click="handleOpen">打开弹窗 </Button>
    <FormModal :modalVisibleProp.sync="modalVisibleProp">
      <template slot="customForm">
        <FormCustom />
      </template>
    </FormModal>
  </div>
</template>

<script>
import FormModal from './FormModal.vue';
import FormCustom from './FormCustom.vue';
export default {
  name: '',
  components: {
    FormModal,
    FormCustom
  },
  data() {
    return {
      modalVisibleProp: false
    };
  },
  methods: {
    // 新增
    handleOpen() {
      this.modalVisibleProp = true;
    }
  }
};
</script>

弹窗组件 FormModal.vue

<template>
  <Modal v-model="visible" title="测试" width="40" @on-visible-change="onVisibleChange" @on-cancel="handleReset">
    <div>
      <slot name="customForm"></slot>
      <FormCommon ref="commonForm" />
    </div>
    <div class="drawer-footer">
      <Button @click="handleReset">取消</Button>&nbsp;
      <Button type="primary" :loading="modalLoading" @click="ok">提交</Button>
    </div>
  </Modal>
</template>
<script>
import FormCommon from './FormCommon.vue';
export default {
  name: 'FormModal',
  components: {
    FormCommon
  },
  props: {
    modalVisibleProp: {
      type: Boolean,
      default: false
    }
  },
  data() {
    return {};
  },
  computed: {
    visible: {
      get: function () {
        return this.modalVisibleProp;
      },
      set: function () {}
    }
  },
  methods: {
    async ok() {
      try {
        let customFormValue = {};
        const customFormInstance = this.$slots.customForm[0].componentInstance;
        if (customFormInstance && typeof customFormInstance.getData === 'function') {
          customFormValue = await customFormInstance.getData(); // 自定义表单获取数据
        }
        const commonFormValue = await this.$refs.commonForm.getData(); // 公共表单获取数据
      } catch (error) {
        console.log(error);
      }
    },
    handleReset() {
      this.$emit('update:modalVisibleProp', false);
    },
    onVisibleChange(visible) {
      if (!visible) {
        this.handleReset();
      }
    }
  }
};
</script>

自定义表单 FormCustom.vue

<template>
  <Form ref="form" :model="formItem" :rules="formItemRules" :label-width="135">
    <FormItem label="custom" prop="a">
      <Input v-model="formItem.a" placeholder="请输入内容"> </Input>
    </FormItem>
  </Form>
</template>
<script>
export default {
  name: '',
  data() {
    return {
      formItem: {
        a: 'customData'
      },
      formItemRules: {
        a: [{ required: true, message: '不能为空' }]
      }
    };
  },
  methods: {
    async getData() {
      const valid = await this.$refs.form.validate();
      if (valid) {
        return this.formItem;
      } else {
        return false;
      }
    },
    setData(data) {
      this.formItem = data;
    }
  }
};
</script>

公共表单 FormCommon.vue

<template>
  <Form ref="form" :model="formItem" :rules="formItemRules" :label-width="135">
    <FormItem label="common" prop="b">
      <Input v-model="formItem.b" placeholder="请输入内容"> </Input>
    </FormItem>
  </Form>
</template>
<script>
export default {
  name: '',
  data() {
    return {
      formItem: {
        b: 'commonData'
      },
      formItemRules: {
        b: [{ required: true, message: '不能为空' }]
      }
    };
  },
  methods: {
    async getData() {
      const valid = await this.$refs.form.validate();
      if (valid) {
        return this.formItem;
      } else {
        return false;
      }
    },
    setData(data) {
      this.formItem = data;
    }
  }
};
</script>

示例:
在这里插入图片描述

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

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

相关文章

认识计算机网络

单单看这一个词语&#xff0c;有熟悉又陌生&#xff0c;让我们来重新认识一下这位大角色——计算机网络。、 一、是什么 以及 怎么来的 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路和通信设备连接起来&#xff0c;在网络操…

GitLab部署到阿里云服务器上

GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建起来的web服务。可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能&#xff0c;能够浏览源代码&#xff0c;管理缺陷和注释。 一、安装 1.创建一…

windows nacos安装配置

GitHub下载压缩包 解压目录&#xff08;注意不要用中文路径&#xff09; 在mysql先创建数据库nacos&#xff0c;再执行sql脚本 配置数据库 #*************** Config Module Related Configurations ***************# ### If use MySQL as datasource: ### Deprecated conf…

ChildLife“童年时光杯”足球联赛启动 共促青少年健康成长

2024年12月21日至22日&#xff0c;由美国知名婴幼儿营养品牌ChildLife童年时光赞助的“童年时光杯”青少年足球联赛将在上海拉开帷幕。本次赛事U7/U8组别共有16支足球队参赛&#xff0c;包括上海幸运星足球俱乐部旗下的明星球队&#xff0c;以及其他青少年俱乐部的优秀队伍&…

动态规划<四> 回文串问题(含对应LeetcodeOJ题)

目录 引例 其余经典OJ题 1.第一题 2.第二题 3.第三题 4.第四题 5.第五题 引例 OJ 传送门Leetcode<647>回文子串 画图分析&#xff1a; 使用动态规划解决 原理&#xff1a;能够将所有子串是否是回文的信息保存在dp表中 在使用暴力方法枚举出所有子串&#xff0c;是…

Log4j1.27配置日志输出级别不起效

起因&#xff1a;构建独立版本debezuim使用时&#xff0c;日志一直打印debug信息。 原因&#xff1a;包冲突问题&#xff0c;进行排包操作。 参考log4j日志级别配置完成后不生效 系统一直打印debug日志_log4j不起作用-CSDN博客 1、application.properties logging.configc…

探索Flink动态CEP:杭州银行的实战案例

摘要&#xff1a;本文撰写自杭州银行大数据工程师唐占峰、欧阳武林老师。将介绍 Flink 动态 CEP的定义与核心概念、应用场景、并深入探讨其技术实现并介绍使用方式。主要分为以下几个内容&#xff1a; Flink动态CEP简介 Flink动态CEP的应用场景 Flink动态CEP的技术实现 Flin…

Git多人协作流程与git命令

目录 一、拉取&#xff1a;从仓库到本地1、第一次拉取2、后续的拉取 二、上传&#xff1a;从本地到仓库三、git commit版本信息标注 一、拉取&#xff1a;从仓库到本地 1、第一次拉取 # clone项目 git clone xxx2、后续的拉取 第一次拉取是指本地为空&#xff0c;如果本地已…

前端:改变鼠标点击物体的颜色

需求&#xff1a; 需要改变图片中某一物体的颜色&#xff0c;该物体是纯色&#xff1b; 鼠标点击哪个物体&#xff0c;哪个物体的颜色变为指定的颜色&#xff0c;利用canvas实现。 演示案例 代码Demo <!DOCTYPE html> <html lang"en"><head>&l…

[Unity] ShaderGraph动态修改Keyword Enum,实现不同效果一键切换

上次更新已然四个月前&#xff0c;零零散散的工作结束&#xff0c;终于有时间写点东西记录一下~ 实际使用中&#xff0c;经常会碰到同一个对象需要切换不同的材质&#xff0c;固然可以通过C#直接替换材质球。 或者在ShaderGraph中使用Comparison配合Branch实现切换&#xff…

电脑出现 0x0000007f 蓝屏问题怎么办,参考以下方法尝试解决

电脑蓝屏是让许多用户头疼的问题&#xff0c;其中出现 “0x0000007f” 错误代码更是较为常见且棘手。了解其背后成因并掌握修复方法&#xff0c;能帮我们快速恢复电脑正常运行。 一、可能的硬件原因 内存问题 内存条长时间使用可能出现物理损坏&#xff0c;如金手指氧化、芯片…

深度学习中的并行策略概述:1 单GPU优化

深度学习中的并行策略概述&#xff1a;1 单GPU优化 1 Training Larger Models on a Single GPU 在讨论模型的“扩展”时&#xff0c;往往会想到在多个GPU或多台机器上进行模型训练。不过&#xff0c;即便是在单个GPU上&#xff0c;也存在多种方法来训练更大规模的模型并提升…

数据结构(哈希表(中)纯概念版)

前言 哈希表&#xff08;Hash Table&#xff09;是计算机科学中的一个基础而重要的数据结构&#xff0c;它广泛评估各种算法和系统中&#xff0c;尤其是在需要快速查找、插入和删除操作的场景中。由于其O( 1)的平均时间复杂度&#xff0c;存储表在性能要求较高的应用中表现得非…

centos7的磁盘扩容

1、首先&#xff0c;确认你的磁盘是否已经正确识别并添加了新的空间。你可以使用lsblk或fdisk -l命令来查看 lsblk fdisk /dev/vda 2、我的情况是这样的&#xff0c;误操作将盘扩展为物理卷轴了&#xff0c;所以说是这样呈现的&#xff0c;如果有我的那种情况请先删除物理卷轴…

uniapp 微信小程序 页面部分截图实现

uniapp 微信小程序 页面部分截图实现 ​ 原理都是将页面元素画成canvas 然后将canvas转化为图片&#xff0c;问题是我页面里边本来就有一个canvas&#xff0c;ucharts图画的canvas我无法画出这块。 ​ 想了一晚上&#xff0c;既然canvas最后能转化为图片&#xff0c;那我直接…

ubuntu笔记

1.系统下载与虚拟机设置 系统下载https://cn.ubuntu.comhttps://releases.ubuntu.com 虚拟机设置: 桥接模式 在桥接模式下, 虚拟出来的操作系统就像是局域网中的一台独立的主机, 它可以访问网内任何一台机器主机网卡和虚拟网卡的IP地址处于同一个网段, 子网掩码、网关、DNS等…

音视频入门基础:AAC专题(13)——FFmpeg源码中,获取ADTS格式的AAC裸流音频信息的实现

音视频入门基础&#xff1a;AAC专题系列文章&#xff1a; 音视频入门基础&#xff1a;AAC专题&#xff08;1&#xff09;——AAC官方文档下载 音视频入门基础&#xff1a;AAC专题&#xff08;2&#xff09;——使用FFmpeg命令生成AAC裸流文件 音视频入门基础&#xff1a;AAC…

开发高效实时美颜工具:从美颜SDK到直播APP插件的全流程解析

今天&#xff0c;小编将以美颜SDK为核心&#xff0c;从开发、集成到优化的全流程&#xff0c;深入解析高效实时美颜工具的实现路径。 一、美颜SDK的核心功能与技术构成 美颜SDK是实时美颜技术的核心模块&#xff0c;承担着图像处理和效果呈现的重任。其主要功能包括&#xff…

用 gdbserver 调试 arm-linux 上的 AWTK 应用程序

很多嵌入式 linux 开发者都能熟练的使用 gdb/lldb 调试应用程序&#xff0c;但是还有不少朋友在调试开发板上的程序时&#xff0c;仍然在使用原始的 printf。本文介绍一下使用 gdbserver 通过网络调试开发板上的 AWTK 应用程序的方法&#xff0c;供有需要的朋友参考。 1. 下载 …

20241225在ubuntu22.04.5下使用smartmontools命令查看ssd的寿命

20241225在ubuntu22.04.5下使用smartmontools命令查看ssd的寿命 2024/12/25 15:10 rootrootrootroot-ThinkBook-16-G5-IRH:~$ sudo apt install smartmontools rootrootrootroot-ThinkBook-16-G5-IRH:~$ sudo fdisk -l Disk /dev/nvme0n1: 3.73 TiB, 4096805658624 bytes, 800…