首页 > 其他分享 >Vue 组件通信之 Bus

Vue 组件通信之 Bus

时间:2022-08-22 13:55:41浏览次数:53  
标签:Vue secondTodo Bus js bus 组件 监听

bus详细描述:

vue中非父子组件之间通信除了使用vuex,也可以通过bus总线,两者适用场景不同。

bus适合小项目、数据被更少组件使用的项目,对于中大型项目 数据在很多组件之间使用的情况 bus就不太适用了。bus其实就是一个发布订阅模式,利用vue的自定义事件机制,在触发的地方通过$emit向外发布一个事件,在需要监听的页面,通过$on监听事件。

vuex适用中大型项目、数据在多组件之间公用的情况。

组件通信bus的使用

公共js文件夹utils中定义bus.js

import Vue from 'vue'
const bus = new Vue()
export default bus

main.js中引入bus,并将bus挂载到vue.prototype上

// 引入bus
import bus from '@/utils/bus.js'
// 挂载到原型上
Vue.prototype.$bus = bus

然后在组件中,可以使用$emit, $on, $off 分别来分发、监听、取消监听事件 

分发事件的组件

methods: {
  todo: function () {
    this.$bus.$emit('todoSth', params);  //params是传递的参数
  }
}

监听的组件

created() {
  this.$bus.$on('todoSth', (params) => {  //获取传递的参数并进行操作
      //todo something
  })
},
// 最好在组件销毁前
// 清除事件监听
beforeDestroy () {
  this.$bus.$off('todoSth');
},

如果需要监听多个组件,只需要更改 bus 的 eventName

created() {
  this.$bus.$on('firstTodo', this.firstTodo);
  this.$bus.$on('secondTodo', this.secondTodo);
},
// 清除事件监听
beforeDestroy () {
  this.$bus.$off('firstTodo', this.firstTodo);
  this.$bus.$off('secondTodo', this.secondTodo);
},

  

 

  

标签:Vue,secondTodo,Bus,js,bus,组件,监听
From: https://www.cnblogs.com/lylweb/p/16612334.html

相关文章

  • vue.ps1 报错
    XXX_fei这个根据自己电脑情况而定vue:无法加载文件C:\Users\XXX_fei\AppData\Roaming\npm\vue.ps1,因为在此系统上禁止运行脚本,这样的问题,需要使用管理员权限打开,然后......
  • vue ui 报错
    vueui报错vue图形界面创建项目报:GraphQLerror:Cannotreturnnullfornon-nullablefieldMutation.projectCreate,解决方法1、删除C:\Users\fei\AppData\Roaming\np......
  • vue报错elementUI使用datepicker报错Avoid mutating a prop directly since the value
    报错问题:[Vuewarn]:Avoidmutatingapropdirectlysincethevaluewillbeoverwrittenwhenevertheparentcomponentre-renders.Instead,useadataorcompute......
  • 在vue中循环调用接口-promise.all()
    methods:{handleAdd(arr){this.loading=trueconstallApi=[]arr.forEach((item,index)=>{constdata={id:item.id,......
  • 日常开发记录-elementUI表格特殊值标红,利用插槽,vue动态绑定类名
    代码:<template><el-table:data="tableData"style="width:100%"><el-table-columnprop="date"label="日期"width="150"></......
  • Vue面试题06:Vue子组件是否可以修改父组件的数据?
    Vue子组件是否可以修改父组件的数据?可以修改但不推荐:首先,文档中指出组件开发需要遵循单向数据流原则:即所有的props都遵循着单向绑定的原则,props因父组件的更新而变化......
  • vue 打包配置相对路径
    前言:临下班了产品找到我,要满足甲方爸爸需求「vue打包的静态资源需要相对路,绝对路径会报错」。时间紧,催的急(半小时问一次),导致我顾此失彼,配置好了这个没配好那个,所以借此反省......
  • 同一个父组件,兄弟组件相互传参,调用
    组件brother2想调用组件brother1的方法,并传参可以新建一个handler.js文件importVuefrom'vue';exportdefaultnewVue();brother1组件方法:importhandlerfr......
  • vue3动态组件切换
    <template><divclass="goods-tabs"><nav><a@click='toggle("GoodsDetail")':class="{active:componentName==='GoodsDetail'}"href="javascript:;">商品详情</a>......
  • vuex的引入
    官方文档可以解决一切问题。1、安装vuexnpminstallvuex@next--save如果版本和你的vue版本不符合,可以根据提示,在@后加上适合的版本号再安装。安装成功之后会在packjs......