百科狗-知识改变命运!
--

组件事件 - emit() 触发事件 - vue 组件

百变鹏仔1年前 (2023-11-21)阅读数 21#技术干货
文章标签事件

组件事件

触发与监听事件

在组件的模板表达式中,可以直接使用$emit()函数触发自定义事件(例如:在v-on的处理函数中):

click me

父组件可以通过v-on(缩写为@)来监听事件:

同样,组件的事件监听器也支持.once修饰符:

组件与 prop 一样,事件的名字也提供了自动转换。请注意,我们触发了一个以camelCase形式命名的事件,但在父组件中可以使用kebab-case形式来监听。与 prop 大小写格式一样,在模板中我们也推荐使用kebab-case形式来编写监听器

TIP:和原生 DOM 事件不太一样,组件触发的事件不会冒泡。你只能监听直接子组件触发的事件。


事件参数

有时候我们会需要在触发事件时附带一个特定的值。举个例子,我们想要组件来管理文本会缩放得多大。在这个场景下,我们可以给$emit提供一个值作为额外的参数:

 Increase by 1 

然后我们在父组件中监听事件,我们可以先简单写一个内联的箭头函数作为监听器,此时可以访问到事件附带的参数:

或者用一个方法函数来作为事件处理函数:

然后,可以从方法的第一个参数上取到这个值:

//js
function increaseCount(n) {
  count.value += n
}


传入$emit()所有参数都会被直接传向监听器。

template


js
function increase(n1,n2,n3) {
  //......
}
MyButton.vue
监听器 foo,将会收到这三个参数值

  Increase by 1 
emit()中传值的参数类型,是任意类型,可以是字符串、数字、布尔值、数组、对象等等。


声明触发的事件

组合式 API 中,自定义定义要触发的事件,可以显式地通过defineEmits()宏来声明。

返回的emit()函数可以用来在 JavaScript 代码中触发事件。

组合式 API中,即,你没有使用

如果你正在搭配

更多细节:如何为组件所抛出事件标注类型

尽管是可选的,我们还是推荐你定义所有要触发的事件,以此更好地在代码中描述和呈现组件的作用。这也使得 Vue 能更好地将事件和透传 attribute 作出区分。

如果一个原生事件的名字(例如click)被定义在 emits 选项中,则监听器只会监听组件触发的click事件,而不会再响应原生的click事件。


事件校验

组件事件 - emit() 触发事件 - vue 组件

和对prop添加类型校验的方式类似,所有触发的事件也可以使用对象形式来描述。

要为事件添加校验,那么事件可以被赋值为一个函数,接受的参数就是emit()抛出事件时传入的内容,返回一个布尔值来表明事件是否合法。

 

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)