系统定制开发vue3:兄弟组件,跨组件传值,事件总线的通信方式(mitt / tiny-emitter)

系统定制开发在中的跨组件通信中,系统定制开发我们如果不用状态管理vuex的话,系统定制开发我们就会采用事件总线系统定制开发的通信的方式,系统定制开发通常做法就是新建一个js文件,例如bus.js,在里面new Vue(),然后export default导出,但是在vue3系统定制开发中移除了事件总线,我们不可以再这么用了,,,但是官方给我们推荐了外部第三方的库来帮我们完成事件总线,官方推荐了两个:  或者 

 npm地址: 或者 

用法也很简单:我这里以mitt举例

 1. 安装mitt

npm install --save mitt

2. 找到vue项目中的utils文件夹,新建一个bus.js

bus.js

  1. import mitt from "mitt";
  2. const emitter = mitt()
  3. export default emitter

3. 使用,我现在需要使用mitt进行兄弟组件之间的通信实现

父组件

  1. <template>
  2. <child1></child1>
  3. <child2></child2>
  4. </template>
  5. <script setup>
  6. import Child1 from "./components/Child1";
  7. import Child2 from "./components/Child2";
  8. </script>

子组件-child1

  1. <template>
  2. <div>child1
  3. <button @click="click">给child2 传值</button>
  4. </div>
  5. </template>
  6. <script setup>
  7. import emitter from "@/utils/bus"
  8. function click() {
  9. emitter.emit('child2Data', {name: '小米'})
  10. }
  11. </script>

 子组件-child2

  1. <template>
  2. <div>child2---{{ str }}</div>
  3. </template>
  4. <script setup>
  5. import emitter from "@/utils/bus"
  6. import {onBeforeUnmount, ref} from "vue";
  7. let str = ref()
  8. emitter.on('child2Data', data => {
  9. str.value = data.name
  10. })
  11. onBeforeUnmount(() => {
  12. emitter.off('child2Data') //关闭
  13. })
  14. </script>

按照vue2的习惯,组件卸载的时候,关闭监听的事件, 和vue2的写法上基本保持一致,页面如下

还有监听全部事件写法

emitter.on('*', (type, e) => console.log(type, e) )

清除所有的事件写法

emitter.all.clear()

更多的直接去npm或者github上查阅即可,tiny-emitter的用法与mitt差不多也都是保持一致的,最后说明;就像vue的官网上说的这样:

在绝大多数情况下,不鼓励使用全局的在组件之间进行通信。虽然在短期内往往是最简单的解决方案,但从长期来看,它维护起来总是令人头疼。根据具体情况来看,有多种事件总线的替代方案:

  •  和应该是父子组件之间沟通的首选。兄弟节点可以通过它们的父节点通信。
  •  允许一个组件与它的插槽内容进行通信。这对于总是一起使用的紧密耦合的组件非常有用。
  • provide/inject 也能够用于组件之间的远距离通信。它可以帮助避免“prop 逐级透传”,即 prop 需要通过许多层级的组件传递下去,但这些组件本身可能并不需要那些 prop。
  • Prop 逐级透传也可以通过重构以使用插槽来避免。如果一个中间组件不需要某些 prop,那么表明它可能存在关注点分离的问题。在该类组件中使用 slot 可以允许父节点直接为它创建内容,因此 prop 可以被直接传递而不需要中间组件的参与。
  • ,比如 

 对全局状态管理比较感兴趣的,可以直接去我的博客中寻找文章:

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发