Vue自定义事件

本文探讨了Vue中的自定义事件,它扩展了JS原生事件,强调了Vue自定义事件的特性如手动注册、组件绑定、this指向以及$emit的使用。同时,对比了JS原生事件的触发机制和事件流概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介:Vue自定义事件是对JS原生事件的拓展,允许程序员自定义并注册一些事件名。

JS原生事件的特点:

1. 触发由浏览器进行捕捉得到;

2.DOM节点属性中存在大量的事件属性,例如onclick、onchange等;

3. 存在事件流特性,先捕获在冒泡,默认在冒泡阶段执行;

4. 必须指定回调函数;

5. 有的事件存在默认回调和行为,会与手动指定的回调存在执行顺序上的冲突

6. JS事件的this指向其被触发的DOM节点。

Vue自定义事件的特点:

1.需要程序猿手动指定并由Vue脚手架自动注册到指定组件上

2. 自定义事件只能给组件标签使用;

3.自定义事件的this指向其被触发的组件

4.可以使用Vue事件修饰符

5.必须手动调用$emit来触发自定义事件,不会被浏览器捕捉

### Vue.js 自定义事件使用指南 在 Vue.js 中,自定义事件是一种强大的机制,用于组件之间的通信。通过 `v-on` 指令绑定事件监听器,并通过 `$emit` 方法触发事件,可以实现父子组件、兄弟组件甚至非父子关系的组件之间的交互[^1]。 以下是一个完整的示例,展示如何在 Vue.js 中使用自定义事件: #### 父子组件间的自定义事件 ```html <!-- 父组件 --> <div id="app"> <child-component @custom-event="handleCustomEvent"></child-component> </div> <script> // 子组件 Vue.component('child-component', { template: `<button @click="sendEvent">触发事件</button>`, methods: { sendEvent() { this.$emit('custom-event', '这是从子组件传递的数据'); } } }); new Vue({ el: '#app', methods: { handleCustomEvent(data) { console.log('自定义事件被触发,接收到的数据:', data); } } }); </script> ``` 在这个例子中,子组件通过 `$emit` 方法触发名为 `custom-event` 的自定义事件,并将数据传递给父组件。父组件通过 `@custom-event` 绑定监听器并处理该事件。 #### 使用事件总线(Event Bus)进行组件间通信 当需要在非父子关系的组件之间通信时,可以使用事件总线[^2]。以下是具体实现: ```javascript // eventBus.js import Vue from 'vue'; const eventBus = new Vue(); export default eventBus; ``` ```html <!-- 组件 A --> <script> import eventBus from './eventBus'; export default { methods: { sendDataToB() { eventBus.$emit('message-from-a', '这是来自组件 A 的消息'); } } }; </script> ``` ```html <!-- 组件 B --> <script> import eventBus from './eventBus'; export default { created() { eventBus.$on('message-from-a', (message) => { console.log('接收到的消息:', message); }); } }; </script> ``` 在此示例中,组件 A 通过事件总线触发事件,而组件 B 监听该事件并接收数据。 #### 表单提交中的自定义事件与修饰符 在处理表单提交时,可以结合自定义事件事件修饰符来简化逻辑[^3]。例如: ```html <form @submit.prevent="handleSubmit"> <input type="text" v-model="formData.name" /> <button type="submit">提交</button> </form> <script> export default { data() { return { formData: { name: '' } }; }, methods: { handleSubmit() { this.$emit('form-submitted', this.formData); } } }; </script> ``` 此代码片段展示了如何通过 `@submit.prevent` 阻止默认表单提交行为,并通过 `$emit` 触发自定义事件。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值