在vue.js 3中使用活动巴士3
#javascript #前端 #vue #vite

介绍

在vue js中,我们基本上有两种使无关组件相互通信的方式:

    pH> uphox m>
  • 事件总线

official documentation上,我们可以阅读:

在大多数情况下,不建议使用全球事件总线在组件之间进行通信。虽然它通常是短期最简单的解决方案,但从长远来看,它几乎总是被证明是一种维护头痛。

从长远来看,通常最好使用vuex。

同样在official documentation中,您可以看到事件总线实现如何从VUE 2变为VUE 3

脚手架项目

在本教程中,我们将使用Vite Build Tool来踩踏项目

# npm 6.x
npm init vite@latest vue-event-bus-1 --template vue

# npm 7+, extra double-dash is needed:
npm init vite@latest vue-event-bus-1 -- --template vue

然后,我们需要安装一个实现事件发射极接口的外部库,在这种情况下为mitt

npm install --save mitt

该项目

该项目由两个简单组件组成, firstComponent.Vue secondComponent.vue ,当我们单击 secondcomponent中的EMIT事件按钮时。强>在** firstComponent.vue **变更**的字符串变为字符串,这要归功于事件总线

代码

在** main.js **我们创建一个用于全球使用的MITT实例

import { ***createApp ***} from 'vue'
import mitt from 'mitt'
import App from './App.vue'


const emitter = mitt()
const app = ***createApp***(App)

app.config.globalProperties.emitter = emitter
app.mount('#app')

现在我们可以在全球访问Emitter,因此在 firstComponent.vue 中,我们订阅了secondcomponent.vue.vue。

发出的事件。

让我们看看 firstComponent.vue

<script>
export default {
  data: function () {
    return {
      testEvent: 'String to change'
    }
  },
  created (){
    this.emitter.on('my-event', (evt) => {
      this.testEvent = evt.eventContent;
    })
  }
}
</script>

现在在** secondcomponent.vue **发出事件

<template>
<div style="border: 1px solid black;">
<h1>Second Component</h1>
<button v-on:click="emitMyEvent">Emit Event</button>
</div>
</template>

<script>
export default {
methods: {
emitMyEvent() {
this.emitter.emit('my-event', {'eventContent': 'String changed'})
}
}
}
</script>




github

您可以在github上找到本教程的代码:CertosinoLab/mediumarticles at vue-event-bus-1 (github.com)

谢谢您的阅读!