Vue组件的自定义事件$emit

组件上的自定义事件是和组件的自定义属性一样,都是模仿HTML正常的标签,由组件给出事件句柄,由使用组件的父组件提供事件处理函数。组件自定义事件真正触发的地方是在组件模板的标签上,组件自己不提供事件处理函数,将这个处理函数给出一个定义,将这个定义抛给使用组件的父组件,由父组件给出。子组件其他处理函数可以通过组件自定义事件的定义调用这个函数。依照面向对象编程设计的原则,属性自定义事件具有依赖倒置的原则,即依赖抽象,不依赖具体。

组件自定义事件示例:

<script setup lang="ts">
const props=defineProps<{msg: string,count:number,show:boolean,list:string[],pfun:Function
}>()
const emits=defineEmits<{(e:"wait",time:number):void(e:"change"):void(e:"append",str:string):void
}>()let test=()=>{props.pfun();emits('wait',2000);return "props.pfun is called, emits wait is called";
}
console.log(test())
</script><template><div @click="$emit('change')"><div>{{ count }}</div><div @click="$emit('wait',1000)">{{ msg }}</div><div @click="$emit('wait')">{{ show }}</div><div @click="$emit('append','appstr')">{{ list }}</div></div>
</template>

组件使用示例:

<script setup lang="ts">
import {ref} from "vue"
import HelloWorld from './components/HelloWorld.vue'const hlist=ref(["hello","wrold","vue"]);
const count=ref(10);function hpfun(){console.log("The value is from father component function");return "The value is from father component function";
}function waitOnHelloWorld(time:number){console.log("wait for "+time+" seconds");count.value+=time;console.log("count is "+count.value);  
}function appendToList(appstr:string){hlist.value.push(appstr);console.log("append is working");
}function changeHW(){console.log("change happens")
}
</script><template><HelloWorld :pfun="hpfun" @change="changeHW" @append="appendToList('world')" @wait="waitOnHelloWorld(10)"  :count="count" msg="Yes, You did it!" :show="true" :list="hlist"></HelloWorld>
</template>

从以上案例中可以得出结论:

1、组件的自定义事件可以设置调用时函数的形参类型、形参个数

2、组件定义时可以在模板上绑定自定义事件,事件参数可以添加也可以不添加,这些参数都不起作用

3、组件使用时,只有父组件为组件的自定义事件绑定了事件处理函数,组件上事件才会有效果

4、父组件提供事件处理函数可以提供组件自定义事件规定的参数,也可以提供、不提供、提供超过形参个数的参数

5、组件自定义事件以父组件实际使用时为组件提供的事件处理函数为准

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

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

相关文章

vue select选择下拉组织树,解决不出现横向滚动条

背景&#xff1a;由于项目需求需要使用下拉选择框的组织架构树 实现代码如下&#xff1a; <el-row><el-col :span"18"><el-form-item label"所属组织:" prop"groupName"><el-select v-model"dataForm.groupName"…

国内某知名半导体公司:实现虚拟化环境下的文件跨网安全交换

立足特定应用领域的创新型企业 上海某半导体公司是中国10大集成电路设计公司之一的子公司。该半导体公司是一家特色工艺集成电路芯片制造企业&#xff0c;专注模拟电路、功率器件所需的特色生产工艺研发与制造&#xff0c;。 该半导体公司不断追求创新&#xff0c;提高自身产…

python爱心代码高级

在Python中&#xff0c;我们可以使用matplotlib库来创建一个更高级的爱心图形。以下是一个示例&#xff1a; import matplotlib.pyplot as pltimport numpy as npx np.linspace(-2, 2, 1000)y1 np.sqrt(1-(abs(x)-1)**2)y2 -3*np.sqrt(1-(abs(x)/2)**0.5)fig, ax plt.subp…

【Java Spring】SpringBoot 日志系统

文章目录 一、Spring Boot 日志系统1.1 Spring Boot 日志框架1.2 自定义日志打印1.3 日志级别设置1.4 日志持久化1.5 lombok 简化日志输出 一、Spring Boot 日志系统 1.1 Spring Boot 日志框架 SLF4J 和 logback都是spring boot内置的日志框架&#xff0c;开发者只负责调用对…

Java HashMap

HashMap 是 Map 接口中基于哈希表的非同步实现, 自身也可以自动扩容。使用时可以通过 key 快速定位到对应的 value。key 和 value 同时可以都为 null。 1 HashMap 的结构定义 JDK1.8 对 HashMap 进行了比较大的优化, 底层实现由之前的 “数组 链表” 改为 “数组 链表 红黑…

Selenium 学习(0.15)——软件测试之测试用例设计方法——场景法

1、场景法的基本概念 场景法是黑盒测试中一种重要的测试用例设计方法。它通过场景描述业务流程&#xff0c;包括基本流和备选流设计测试用例遍历软件系统功能&#xff0c;从而验证其正确性。 通过运用场景对系统的功能点或业务流程进行描述&#xff0c;从而提…

男UI设计师主要是做什么的优漫教育

1、根据各种相关软件的用户群&#xff0c;提出构思新颖、有高度吸引力的创意设计&#xff1b;   2、对页面进行优化&#xff0c;使用户操作更趋于人性化&#xff1b;   3、维护现有的应用产品&#xff1b;   4、收集和分析用户对于GUI的需求。   二、需要学什么…

dji psdk开发(9)第三方自定义 HMS 功能

文章目录 1、基本概念1.1、dji_hms_manager.h 模块定义1.2、dji_hms_customization.h 模块定义2、测试代码2.1、获取HMS信息2.1.1、测试代码2.1.2、测试结果运行图2.2、自定义HMS信息推送2.2.1、自定义一个 hms 数据库信息json表2.2.2、测试代码2.2.3、测试结果运行图3、存在问…

svg教程

简单来说&#xff1a; 位图&#xff1a;放大会失真图像边缘有锯齿&#xff1b;是由像素点组成&#xff1b;前端的 Canvas 就是位图效果。 矢量图&#xff1a;放大不会失真&#xff1b;使用 XML 描述图形。 我在 知乎 上找了一个图对说明一下。 左边是位图&#xff0c;右边是…

Maven Helper插件——实现一键Maven依赖冲突问题

总结/朱季谦 业余在一个SpringBoot项目集成Swagger2时&#xff0c;启动过程一直出现以下报错信息—— An attempt was made to call a method that does not exist. The attempt was made from the following location: ​ springfox.documentation.schema.DefaultModelDepe…

vue创建公共指令文件并引入

创建公共js文件 globalDirective.js // globalDirective.js export default {install(Vue) {Vue.directive(global-name, { // 指令名// 指令});} };在main.js文件内引入 // main.js import globalDirectives from ./globalDirectives; Vue.use(globalDirectives);在vue文件中…

独立搭建UI自动化测试框架分享

前言 今天给大家分享一个seleniumtestngmavenant的UI自动化&#xff0c;可以用于功能测试&#xff0c;也可按复杂的业务流程编写测试用例&#xff0c;今天此篇文章不过多讲解如何实现CI/CD&#xff0c;只讲解自己能独立搭建UI框架&#xff0c;如果有其他好的框架也可以联系我&…

SQL注入 - CTF常见题型

文章目录 题型一 &#xff08; 字符型注入 &#xff09;题型二 &#xff08; 整数型注入 &#xff09;题型三 &#xff08; 信息收集SQL注入&#xff09;题型四 &#xff08; 万能密码登录 &#xff09;题型五 &#xff08; 搜索型注入文件读写 &#xff09;题型六 &#xff08…

1-1、汇编语言概述

语雀原文链接 文章目录 1、机器语言2、汇编语言&#xff08;Assembly Language&#xff09;汇编语言工作过程汇编语言三类指令 3、学习资料电子PDF课件论坛视频教程 1、机器语言 机器语言是机器指令的集合。机器指令展开来讲就是一台机器可以正确执行的命令。电子计算机的机器…

比特币上的有状态多重签名

无需链下通信 介绍 随着区块链和加密货币空间的发展&#xff0c;越来越需要增强安全措施来保护数字资产。 应对这一挑战的突出解决方案之一是多重签名&#xff08;多重签名&#xff09;钱包。 这些钱包在执行交易之前需要多方签名&#xff0c;从而提供额外的安全层来防止未经授…

【产品设计】SaaS平台产品架构设计

产品架构是基于业务架构的&#xff0c;那么做产品架构前&#xff0c;需要对业务架构有哪些清晰的了解呢&#xff1f; 当我们去搜索“架构”&#xff0c;可以得到很多的架构图片&#xff0c;比如组织架构、业务架构、数据架构、技术架构、安全架构、产品架构、部署架构等。 什么…

代码笔记---JavaScript--(防抖-节流-清理所有定时器-定时任务)

文章目录 清理所有定时器防抖代码节流代码自定义时间戳定时器复杂实现 vueuse中工具类 定时任务手动实现工具类useInterval 清理所有定时器 export function clearAllTimer() {let id setTimeout(() > { }, 0)while (id > 0) {window.clearTimeout(id)id--} }防抖代码 …

容器相关面试题

什么是容器&#xff1f; 容器是一种轻量级、可移植的软件打包和部署技术&#xff0c;用于将应用程序及其依赖项打包在一起以便在不同环境中运行。容器化技术的主要目标是提高应用程序的可移植性、一致性和可部署性。 关键特征和概念&#xff1a; 轻量级&#xff1a; 容器共享…

SpringCloud--分布式事务实现

一、分布式事务 首先要明白事务是指数据库中的一组操作&#xff0c;这些操作要么全部成功执行&#xff0c;要么全部不执行&#xff0c;以保持数据的一致性和完整性。在本地事务中&#xff0c;也就是传统的单机事务&#xff0c;必须要满足原子性(Atomicity)、一致性(Consistenc…

通过栅格地图,目标路径(目标点)建立距离场地图

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言(1)距离场输出(2)实现原理1、更新地图调用setLocalGoal()【一个目标点】,或setTargetCells()【一条路径】2、计算当前位置离目标路径的距…