vue3 emitter 使用
时间: 2023-06-21 07:11:36 浏览: 68
Vue3 的 emitter 与 Vue2 的 $emit 有些不同,Vue3 的 emitter 是通过 `mitt` 库实现的,可以先使用 `npm install mitt` 安装。
使用 emitter 需要先创建一个实例,可以在组件中通过 `setup()` 函数中的 `const emitter = mitt()` 创建一个实例,也可以在全局中创建一个实例。
在组件中使用 emitter 可以通过 `emitter.emit(eventName, ...args)` 触发事件,通过 `emitter.on(eventName, handler)` 监听事件。
示例代码如下:
```javascript
// 引入mitt库
import mitt from 'mitt'
// 全局创建实例
const emitter = mitt()
// 组件中使用
export default {
setup() {
// 监听事件
emitter.on('custom-event', (arg1, arg2) => {
console.log(arg1, arg2)
})
// 触发事件
emitter.emit('custom-event', 'hello', 'world')
}
}
```
注意:在 Vue3 中,`$emit` 已经被移除,使用 `emitter` 可以达到相同的效果。
相关问题
emitter vue3
在Vue 3中,由于移除了$on和$off等事件API,你可以使用第三方库mitt或tiny-emitter作为事件总线来替代。其中,使用mitt的方式比较常见。你可以通过安装mitt来引入该库,例如使用yarn add mitt命令安装。然后,在你的代码中,可以创建一个mitt实例作为事件总线对象,并通过emit方法触发事件,通过on方法监听事件,通过off方法卸载事件监听。
如果你想在Vue 3 Composition API中使用事件总线,你需要在main.js中使用Vue 3的新provideAPI来提供事件总线实例。你可以引入mitt库,并在代码中创建一个mitt实例作为事件总线对象。然后,你可以在任何组件中使用inject来注册事件总线,并通过on方法监听事件,通过emit方法触发事件。记得在组件销毁时使用off方法卸载事件监听。
总结起来,在Vue 3中使用mitt作为事件总线的步骤如下:
1. 在项目中安装mitt库:yarn add mitt
2. 在main.js中引入mitt库,并创建一个mitt实例作为事件总线对象。
3. 使用Vue 3的新provideAPI,在main.js中提供事件总线实例。
4. 在需要使用事件总线的组件中,使用inject来注册事件总线。
5. 在组件中使用on方法监听事件,使用emit方法触发事件。
6. 在组件销毁时使用off方法卸载事件监听。
这样就可以在Vue 3中使用mitt作为事件总线了。希望对你有帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [vue3 事件总线 emit](https://blog.csdn.net/XKFC1/article/details/124192137)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *3* [Vue3优雅的使用事件总线](https://blog.csdn.net/TomCat_And_Jerry/article/details/119878603)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
vue中emitter
在Vue.js中,"emitter"是一个用于组件间通信的概念。在Vue.js 1.x版本中,提供了两个方法:$dispatch和$broadcast。其中,$dispatch用于向上级派发事件,只要是它的父级(一级或多级以上),都可以在组件内通过$on监听到;而$broadcast则相反,是由上级向下级广播事件的。然而,在Vue.js 2.x版本中,$dispatch和$broadcast已经被废弃。
对于组件间的通信,Vue.js推荐使用provide和inject这对API。在父组件中,可以通过provide方法提供数据给子组件;而在子组件中,可以通过inject数组来声明需要注入的父组件实例。具体使用方法如下:
在父组件中:
```
provide() {
return {
parent: this,
};
},
```
在子组件中:
```
inject: ['parent'],
```
这样,在子组件中就可以通过this.parent来访问父组件的实例。
另外,在Vue.js中,还可以使用$emit方法来触发自定义事件。$emit会在当前组件实例上触发自定义事件,并传递一些参数给监听器的回调函数。一般来说,我们会在父级组件中使用@on的方式来监听子组件触发的自定义事件。
例如,在子组件中触发事件:
```
// child.vue
export default {
methods: {
handleEmitEvent() {
this.$emit('test', 'Hello Vue.js');
}
}
}
```
在父组件中监听事件:
```
<child-component @test="handleTest"></child-component>
```
以上是在Vue.js中使用emitter进行组件通信的基本方法。通过provide和inject提供数据和注入实例,以及使用$emit触发自定义事件,可以实现组件间的消息传递和通信。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>