vue3 组合式API defineEmits() 与 emits 组件选项

server/2024/9/20 7:28:05/ 标签: vue.js, javascript, 前端

defineEmits()emits组件选项在功能上都是用于声明组件可以向外触发的事件。它们的核心目的都是让组件明确地告知外界它能够发出哪些自定义事件,以此来规范组件间的通信。

defineEmits()在 Vue 3 的组合式 API 中使用。
emits组件选项 在Vue 2 及 Vue 3 的选项式 API 中使用。

defineEmits()

defineEmits()用于声明由组件触发的自定义事件。

可以以两种形式声明触发的事件:

  • 使用字符串数组的简易形式。
  • 使用对象的完整形式。该对象的每个属性键是事件的名称,值是 null 或一个验证函数。
    • 验证函数应返回布尔值,以表明事件参数是否通过了验证。

字符串数组语法:

<script setup>javascript">
const emit = defineEmits(['increment', 'decrement']);
</script>

defineEmits接收一个字符串数组['increment', 'decrement'],这意味着在该组件内部可以通过emit('increment')emit('decrement')来触发incrementdecrement这两个事件。


对象语法:

<script setup>javascript">
const emit = defineEmits({updateCount: (newCount) => {return typeof newCount === 'number';}
});
</script>

defineEmits接收一个对象,对象的键updateCount是事件名称,值是一个验证函数(newCount) => { return typeof newCount === 'number'; }。当在组件内部调用emit('updateCount', value)时,这个验证函数会检查传递的value是否为数字类型,如果不是,Vue 会在开发环境下给出警告。



defineEmits函数的返回值是一个函数,通常命名为emitemit可以在子组件中触发自定义事件。当子组件需要向父组件传递数据或通知父组件发生了某些事情时,可以使用emit函数触发相应的自定义事件。

示例

子组件ChildComponent.vue

<!-- ChildComponent.vue -->
<template><h2>ChildComponent的标题</h2><div>ChildComponent的内容</div><div>count: {{ count }}</div><div>在ChildComponent中展示customValue的值:{{ attrs.customValue }}</div><button @click="changeCount">修改count 并 赋值给 父组件的 customValue</button>
</template>
<script setup lang="ts">javascript">
import { ref, useAttrs } from 'vue';
let attrs = useAttrs();
let count = ref(1);const emit = defineEmits({updateCustomValue: count => {return typeof count.value == 'number';}
});const changeCount = () => {count.value++emit('updateCustomValue', count.value);
};
</script>

在父组件中使用ChildComponent.vue

<template><div class="home-wrap"><h1>父组件</h1><ChildComponentclass="child-div":customValue="customValue"@updateCustomValue="updateCustomValue"/></div>
</template>
<script setup lang="ts">javascript">
import { ref } from 'vue';
import ChildComponent from './ChildComponent.vue';
const customValue = ref(10);
const updateCustomValue = ($event: number) => {console.log($event);customValue.value = $event;
};
</script>

如果将子组件的count 属性声明为字符串count = ref('hello world'),点击按钮,调用emit('updateCustomValue', count.value);,字符串hello world 会被赋值给 customValue

浏览器控制台报错:

Invalid event arguments: event validation failed for event “updateCustomValue”.

无效的事件参数:事件"updateCustomValue"验证失败。

emits组件选项

emits用于声明由组件触发的自定义事件。

可以以两种形式声明触发的事件:

  • 使用字符串数组的简易形式。
  • 使用对象的完整形式。该对象的每个属性键是事件的名称,值是 null 或一个验证函数。
    • 验证函数会接收到传递给组件的 $emit 调用的额外参数。例如,如果 this.$emit('foo', 1) 被调用,foo 相应的验证函数将接受参数 1
    • 验证函数应返回布尔值,以表明事件参数是否通过了验证。

字符串数组语法:

javascript">export default {emits: ['customEvent1', 'customEvent2']
};

emits是一个组件选项,它是一个字符串数组,其中customEvent1customEvent2是这个组件可以触发的两个自定义事件。在组件的方法中,可以通过this.$emit('customEvent1', data)来触发customEvent1事件,并传递相关数据data


对象语法:

export default {emits: {customEvent: (payload) => {// 验证逻辑,例如检查 payload 的类型或值return payload > 0;}}
};

emits是一个对象,customEvent是事件名称,其对应的值是一个验证函数。当在组件内部通过this.$emit('customEvent', value)触发事件时,这个验证函数会检查传递的value是否符合条件(这里是value > 0)。如果不符合,Vue 会在开发环境下发出警告。


http://www.ppmy.cn/server/118235.html

相关文章

WPF入门教学一 WPF简介

WPF&#xff08;Windows Presentation Foundation&#xff09;是微软公司推出的一项用于构建Windows桌面应用程序的UI框架。它提供了丰富的图形功能、数据绑定和自定义控件等特性&#xff0c;使得开发者能够创建出美观且功能丰富的用户界面。WPF是.NET框架的一部分&#xff0c;…

C++笔记---二叉搜索树

1. 二叉搜索树的概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: • 若它的左子树不为空&#xff0c;则左子树上所有结点的值都小于等于根结点的值。 • 若它的右子树不为空&#xff0c;则右子树上所有结点的值都大于等于…

【Echarts】vue3打开echarts的正确方式

ECharts 是一个功能强大、灵活易用的数据可视化工具&#xff0c;适用于商业报表、数据分析、科研教育等多种场景。那么该如何优雅的使用Echarts呢? 这里以vue3为例。 安装echarts pnpm i echarts封装公用方法 // ts-nocheck import * as echarts from echarts; // 我们这里借…

ElementUI大坑Notification修改样式

默认<style lang"scss" scoped>局部样式&#xff0c;尝试用deep透传也无效 实践成功方法&#xff1a;单独写一个style <style> .el-notification{position: absolute !important;top: 40% !important;left: 40% !important; } </style> 也支持自…

基于STM32的温度、电流、电压检测proteus仿真系统(OLED、DHT11、继电器、电机)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STM32F103C8T6 采用DHT11读取温度、滑动变阻器模拟读取电流、电压。 通过OLED屏幕显示&#xff0c;设置电流阈值为80&#xff0c;电流小阈值为50&#xff0c;电压阈值为60&#xff0c;温度阈值…

【网络安全】对称密码体制

1. 对称密码体制概述 1.1 定义与特点 对称密码体制&#xff0c;也称为单钥密码体制&#xff0c;是一种加密方法&#xff0c;其中加密和解密过程使用相同的密钥。这种加密方式的主要特点包括简单、高效和计算速度快&#xff0c;适合于大量数据的快速加密和解密。对称密码体制的…

使用Django 搭建自动化平台

由于本人python 环境已安装&#xff0c;就不重复安装了&#xff0c;博客中有python的安装说明&#xff1b; 1 Django 的安装 安装很简单&#xff1a; pip install django 但是国内的网络环境&#xff0c;你很难成功&#xff0c;此处省略一些字。。。。。 问题总要解决&#…

鸿蒙next web组件和h5 交互实战来了

前言导读 鸿蒙next web组件这个专题之前一直想讲一下 苦于没有时间&#xff0c;周末把代码研究的差不多了&#xff0c;所以就趁着现在这个时间节点分享给大家。也希望能对各位读者网友工作和学习有帮助&#xff0c;废话不多说我们正式开始。 效果图 默认页面 上面H5 下面ArkU…

学习大数据DAY57 新的接口配置

作业  完成 API 接口和文件的接入, 并部署到生产调度平台, 每个任务最后至少 要有两条 不报错 的日志, 报错就驳回作业  作业不需要复制日志 API Appliation Program Interface 应用程序接口 > JSON 的地址 客户需求: 把 https://zhiyun.pub:9099/site/c-class…

微信小程序实现转盘抽奖,可以自定义编辑奖项列表

这个功能可以分几步实现&#xff1a; 1. 界面设计: 转盘区域: 使用 canvas 绘制转盘&#xff0c;可配置扇形数量、颜色、文字等。 按钮: "开始/停止" 按钮控制转盘转动。 编辑按钮: 点击弹出弹窗&#xff0c;编辑转盘项目。 中奖弹窗: 显示中奖结果。 2. 数据结构:…

ip映射域名,一般用于mysql和redis的固定映射,方便快捷打包

举个例子 192.168.3.101mysql映射到mysql.smartlink.com 192.168.3.101redis redis.smartlink.com 要将IP地址映射到域名&#xff0c;可以通过几种方式实现&#xff0c;包括修改本地主机文件&#xff08;仅适用于本地开发环境&#xff09;、设置DNS解析&#xff08;适用于生产环…

uniapp在开发app时上传文件时的问题

手机拍照然后上传没问题 但是在相册中选择的照片上传 ios手机不行 安卓一部分手机也点击没反应 最后对比了下参数 发现路径有所不同 使用uni.saveFile保存路径好在重新上传 saveFileSync(tempFilePath){return new Promise((resolve, reject) > {uni.saveFile({tempFilePath…

【红动中国-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

python解析ip范围,判断ip是否在ip范围内

目录 1. 背景 2. 代码使用示例 2.1 分割ip&#xff0c;横杠 &#xff08;-&#xff09; 的ip范围 2.2 判断ip在掩码&#xff08;/&#xff09;的范围内 2.3 判断ip在横杠&#xff08;-&#xff09;的范围内 2.3.1 格式&#xff1a;192.168.1.1-192.168.1.10 2.3.2 格式&…

【CTF Reverse】XCTF GFSJ1092 easyEZbaby_app Writeup(Android+逆向工程+Java)

easyEZbaby_app 究极简单的安卓逆向 解法 得到一个 apk 安装包。 用 jadx 打开&#xff0c;搜索文本 flag&#xff0c;加载所有。 flag 是 obj obj2&#xff0c;来自用户的用户名和密码。 Override // android.view.View.OnClickListenerpublic void onClick(View view) {St…

Kafka日志索引详解与常见问题分析

目录 一、Kafka的Log日志梳理 1、Topic下的消息是如何存储的&#xff1f; 1. log文件追加记录所有消息 2. index和timeindex加速读取log消息日志 2、文件清理机制 1. 如何判断哪些日志文件过期了 2. 过期的日志文件如何处理 3、Kafka的文件高效读写机制 1. Kafka的文件…

MySQL基于GTID同步模式搭建主从复制

系列文章目录 rpmbuild构建mysql5.7.42版本的rpm包 文章目录 系列文章目录一、mysql-5.7.42RPM包构建二、同步模式分类介绍1.异步同步模式2.半同步模式2.1.实现半同步操作流程2.2.半同步问题总结2.3.半同步一致性2.4.异步与半同步对比 3.GTID同步 三、GTID同步介绍1.gtid介绍2…

远程办公梦想破灭!亚马逊却要求员工一周五天回办公室!携程员工:瑟瑟发抖中

最近,亚马逊的消息炸开了锅:他们要求员工每周五天回办公室工作。看到这消息时,你是不是觉得有点惊讶?甚至有点不敢相信?毕竟,过去几年我们一直在讨论“远程办公”是未来,越来越多的公司开始允许员工居家工作,比如携程前不久也也推出了 3+2 混合办公模式。 现如今,…

检测场景变化并将视频按场景分开

1. PySceneDetect PySceneDetect 是一个功能强大的 Python 库&#xff0c;专门用于检测视频中的场景变化。它可以自动检测视频中不同场景的切换&#xff0c;并返回场景的时间段。你可以使用这些信息来进一步将视频分割为不同的片段 通过 pip 安装 PySceneDetect&#xff1a; …

CentOS 7官方源停服,配置本机光盘yum源

1、挂载系统光盘 mkdir /mnt/iso mount -o loop /tools/CentOS-7-x86_64-DVD-1810.iso /mnt/iso cd /mnt/iso/Packages/ rpm -ivh /mnt/iso/Packages/yum-utils-1.1.31-50.el7.noarch.rpm(图形界面安装&#xff0c;默契已安装&#xff09; 如安装yum-utils依赖错误&#x…