当前位置: 首页 > 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>

http://www.xdnf.cn/news/347563.html

相关文章:

  • Qwen3中的MoE是如何平衡专家负载的?
  • 跨线程和跨进程通信还有多种方式对比
  • JS 下载data:image/png;base64, 图片
  • 告别手动输入密码:基于SSHPass的自动化文件传输实践告别手动输入密码:基于SSHPass的自动化文件传输实践
  • Marin说PCB之器件的3D数模匹配失效案例
  • 在微程序控制器中,各概念之间的详细关系
  • IEEE出版|2025年物联网、数据科学与先进计算国际学术会议(IDSAC2025)
  • MyBatis 动态 SQL 完整笔记
  • 深泽多层电路在PCB行业中属于什么水平
  • laravel 使用异步队列,context带的上下文造成反序列化出问题
  • sql server限制用户只能访问特定表
  • PWN基础-ROP技术-ret2syscall-64位程序栈溢出利用
  • el-table合并单元
  • 【基础知识】李雅普诺夫方程与李雅普诺夫函数
  • 985高校查重率“隐性阈值”:低于5%可能被重点审查!
  • 从艾米・阿尔文看 CTO 的多面特质与成长路径
  • 英皇娱乐X乐华娱乐携手造星!“英皇乐华青少年艺人培训班”正式启动!
  • 深度学习-159-综述之混合专家模型和推理模型以及工作流和智能体的概念
  • Elastic:如何构建由 AI 驱动的数字客户体验策略
  • 计算机网络-LDP工作过程详解
  • 代码随想录算法训练营第60期第三十天打卡
  • C++之set和map的运用
  • MySQL 数据库
  • AI人工智能在交通物流领域的应用
  • web 自动化之 Selenium 元素定位和浏览器操作
  • 探索 C++ 在行业应用与技术融合中的核心价值
  • Baklib构建AI就绪知识管理体系
  • 湖北理元理律师事务所的企业债务重组实践:挽救实体经济的法律处方
  • B站pwn教程笔记-8
  • 验证码(笔记)