首页 > 其他分享 >vue 事件中央总线

vue 事件中央总线

时间:2022-08-16 13:34:04浏览次数:60  
标签:vue bus 总线 js Vue 事件 监听 传值 pubsub

vue 事件中央总线

作用: 实现任意组件间的通信

实现的方法: 有以下两种方式

方式1: 全局事件总线
1.在main.js文件中定义
new Vue({ el: '#app', router, store, render: h => h(App), beforeCreate(){ Vue.prototype.$bus = this } })
2.使用方法
this.$bus.$emit('定义名称',值) // 监听数据 (在mounted监听数据) this.$bus.$on('定义名称' val=>{}) // 销毁(在beforeDestroy销毁) this.$bus.$off('定义名称')

方式2:
1.在main.js的同级建一个bus.js
import Vue from "vue" export default new Vue
2.在main.js引入
// 事件中央总线传值 Vue.prototype.bus = new Vue();
3.使用方法
`// 1.引入(传值和监听数据部分都需引入bus.js文件)
import Bus from '@bus.js'

// 传值(我是在beforeDestroy中传值的)
Bus.$emit('定义名称',值)

// 监听数据 (我在beforeCreate 中监听数据)
Bus.$on('定义名称',val=>{})

//销毁(在监听数据页面的 beforeDestroy 中销毁)
Bus.$off('定义名称')
扩展: 还可以使用消息订阅与发布的方式 实现任意组件间的传值// 下载插件 pubsub-js
npm i pubsub-js --save

// 在需要传和监听的页面引入
import pubsub from 'pubsub-js'

// 发布(传值)
pubsub.publish('xxx',值)

// 订阅(接收)
this.pubId = pubsub.subscribe('xxx',(msgName,data)=>{
// 注意 msgName的值为你定义的 xxx data为你真正传过来的 值
})

// 销毁 (在beforeDestroy)
pubsub.unsubscribe(this.pubId)
`

标签:vue,bus,总线,js,Vue,事件,监听,传值,pubsub
From: https://www.cnblogs.com/young-people/p/16591221.html

相关文章

  • Vue Router与Vue组件传值
    实战使用Vue.js创建一个具有2个页面的应用,要求:有两个页面:首页和二级页运行项目后默认进入首页,首页显示“跳转中”三秒后,自动跳转到二级页写两个页面,利用传值;改变......
  • vue-router跳转页面的两种方式
    1.通过path地址(1)query传参:/path?key1=value&key2=val2...this.$router.push(`/detail/${this.msg}/dfdf`)(2)params传参:/path/${this.msg}/dfdfthis.$router.pus......
  • Vue项目中select下来选项绑定国际化语言
    1.当切换语言的时候,想要响应式地更新下拉选项,关键点是用$t(item.label)取得语言。注意item.label左右是不带引号的,否则会当作原字符串输出。<el-selectv-mo......
  • vue 调用摄像头 Demo2
    代码html<videoid="videoCamera":width="videoWidth":height="videoHeight"autoplay></video><canvasstyle="display:none"id="canvasCamera":width="......
  • Vue中经常出现 报错:Component name “xxxx“ should always be multi-word.
    报错:Componentname“xxxx”shouldalwaysbemulti-word.意思是说组件名"xxxx"应该总是多个单词,其实就是eslint报出我的组件名称命名不规范,应该采用驼峰命名法。解决方......
  • Vue 组件化编程
    Vue组件化编程  非单文件组件一个文件中包含n个组件。<!DOCTYPEhtml><html><head><metalang="zh-cn"><metacharset="UTF-8"><title></titl......
  • vue js 计时器setInterval(),setTimeout() 循环调用,定时调用
    setInterval():他就是每隔多少秒或毫秒调用(循环的调用)。setTimeout():他就是过了多少秒或毫秒调用(调用一次)。//过500毫秒调用setTimeout(()=>{//方法区},500);//......
  • vue3------组件生命周期
    组件的生命周期是指:组件从创建 →运行(渲染)→销毁的整个过程 完整的生命周期: ......
  • vue简单实现一个table组件
    看到elementUI封装的el-table组件觉得很有意思,就自己简单实现了自己的一个table组件,具体功能有 columns:表头 data:数据 border:是否有边框 zebra:是否有斑马纹 ......
  • VUE+Django前后端分离-第三部分【前后端数据传递】
    一、前端代码首先:前端中任何变量都要被定义,具体如下:   <template><div><h3>推置引擎测试界面</h3><el-form:inline="true":model="for......