当前位置: 首页 > news >正文

Vue3中emits和emit

在 Vue 3 中,emits 和 emit 是两个相关但不同的概念,它们共同用于处理自定义事件机制。


1. emit(方法)

  • 作用:用于子组件向父组件触发(发送)自定义事件,并可以传递数据。

  • 语法this.$emit('事件名', 参数1, 参数2, ...)

  • 特点

    • 由子组件调用,父组件通过 @事件名 监听。

    • 如果不声明 emits,Vue 仍然可以接收事件,但会发出警告(如你的代码所示)。


2. emits(选项)

  • 作用显式声明组件会触发哪些自定义事件,提高代码可读性,并避免 Vue 的警告。

  • 语法

    emits: ['事件1', '事件2', ...]

    或更详细的校验方式:

    emits: {'事件名': (payload) => {// 校验参数是否合法return typeof payload === 'string'; // 返回 true 表示校验通过}
    }
  • 特点

    • 不是必须的,但推荐声明,避免警告,并让组件的接口更清晰。

    • 如果使用 emits,Vue 会知道这些是自定义事件,不会尝试将其作为原生 DOM 事件处理。


3. 二者的联系

特性emit(方法)emits(选项)
作用触发自定义事件声明自定义事件
是否必须必须(用于触发事件)可选(但推荐声明)
位置在方法中调用(this.$emit()在组件选项中声明
关系emit 触发的事件,最好先在 emits 中声明emits 声明的事件,由 emit 触发

4. 为什么 Vue 3 推荐使用 emits

  1. 明确组件接口:让其他开发者一眼看出组件会触发哪些事件。

  2. 避免警告:如果不声明 emits,Vue 会认为你可能误写了事件名,发出警告。

  3. 更好的类型推断(在 TypeScript 中尤其有用)。


<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div id="app">  <!-- 父组件 --><h1>{{title}}</h1><child @my-event="handler"></child></div></body>
<!--自定义事件:$emit("自定义事件名称",参数1,参数2...)参数是需要发到父组件的参数 -->
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>const child = {// emits: ['my-event'], // 要么添加这行声明要么用div包裹template,不然警告template: `<div><h2>暮乘白帝过重山</h2><button @click="btnClick">子组件按钮</button></div>`,methods: {btnClick() {console.log("子组件按钮被点击了")this.$emit("my-event","child-data")},}}// 定义根组件const app = Vue.createApp({data() {return {title:"自定义事件",msg: "父组件"}},components: {child},methods:{handler(parm){console.log("子组件传来的数据:",parm)}}})app.mount('#app')
</script>
</html>

相关文章:

  • App Store支付新政重构跨境电商生态:eBay卖家的突围之道
  • ABP vNext + gRPC 实现服务间高速通信
  • 【嵌入式面试高频知识点】-wifi相关
  • [硬件电路-18]:MCU - LPC1765FBD100是恩智浦(NXP)半导体推出的一款基于ARM Cortex-M3内核的高性能32位微控制器
  • Python3 上下文管理器:优雅管理资源的艺术
  • Java复习笔记-基础
  • Python cv2特征检测与描述:从理论到实战
  • Python量化交易Backtrader技术指标的实现
  • 【嵌入式开发-CAN】
  • ProfiNet与CANopen:新能源时代的“语言翻译官”
  • MySQL事务隔离机制与并发控制策略
  • Java详解LeetCode 热题 100(13):LeetCode 53:最大子数组和(Maximum Subarray)详解
  • maven 依赖冲突异常分析
  • Java基础
  • matlab稳定求解高精度二维对流扩散方程
  • 线代第二章矩阵第五、六、七节矩阵的转置、方阵的行列式、方阵的伴随矩阵
  • 初始图形学(8)
  • 图神经网络中的虚拟节点
  • Vue3快速入门/Vue3基础速通
  • neo4j官方示例
  • 央行设立服务消费与养老再贷款,额度5000亿元
  • 外交部:习近平主席同普京总统达成许多新的重要共识
  • 1450亿元!财政部拟发行2025年中央金融机构注资特别国债(二期)
  • 美乌基金协议:美国搞了一套可在资源富集地区复刻的商业模式
  • 援藏博士张兴堂已任西藏农牧学院党委书记、副校长
  • 一企业采购国产化肥冒充“挪威化肥”:7人被抓获