概述
- 自定义事件
emit是 Vue 子组件向父组件传递事件的最常用方式
语法
使用 emit 示例
emit(eventName: string, ...emitArgs: any[]);
说明
- emit发射出去的事件可以传递多个参数(但不建议此法使用)
- 所有传入 emit('foo', 1, 2, 3)` 触发后,监听器函数将会收到这三个参数值。
使用时注意
eventName: 事件名, 使用小驼峰- 父组件绑定自定义事件, 建议使用
kebab-case- 子组件发射信号, 给父组件接收并处理相应的逻辑
- 在
Vue3中, 子组件向父组件传递的事件需要在emits选项中定义(方便通知和调试)
自定义事件中可能存在的事件冒泡
问题说明:
按照层级emit相同的原生事件 (click, mouseover, mousemove), 可能会事件冒泡打印
解决方案:
- vue3解决事件方案:使用组件内部的事件代替子组件绑定的原生事件监听 (emits注册事件)
- vue2解决事件方案:模板上使用@xxx.native
emits 作为对象
emits也可以是一个对象, 对象的值可以是一个验证函数(事件校验) (验证不通过, 会提示非法, 但仍然执行)- 此法可便于 Vue 开发者调试程序
emits和v-model的关系 (父子组件的数据双向绑定)
emits 和 v-model 一起使用
-
父子间同时绑定并处理一个值
- 子组件:
:value="inputValue"@input="$emit('update:inputValue', $event.target.value)"; - 父组件:
v-model:input-value="inputValue"
- 子组件:
-
modelModifermodelModifers可以获取到props的修饰符- 自定义和
prop名称相同的modifer, 并在emit事件的时候进行拦截操作