VUE eventBus
问题背景:组件传值;在项目开发中,会发现组件传值是一个组基本的操作,也是用的最多的。但是很多时候可能涉及到爷爷和孙子,甚至重孙子之间需要的传值。这个时候eventBus就到了大显身手的时候了。
eventBus 嗯 ,就叫一个事件公共汽车吧。每个人把需要共享给别人的物品就放在这个车上,谁需要了就可以去拿,这样子是不是很方便,每个人都可以访问到,每个人也可以往这个车子上放东西。
下面开始这个过程,一共就四步。
第一步就是先把公交车造出来。先创建eventBus.js 文件。 /** * 某某页面 * @author: leon * @create: 2018-05-21 10:01 */ import Vue from ‘vue‘; const bus = new Vue(); export default { /** * 注册全局事件 * @param eventName 事件名称 * @param handler 事件处理函数 * @param scope vm对象,一般传this 建议必须要传(页面的this),自动销毁功能 * @param once 是否单次注册 */ on(eventName, handler, scope = null, once = false) { if (once) { bus.$once(eventName, handler); return; } bus.$on(eventName, handler); if (scope) { let originalDestroy = scope.$destroy; scope.$destroy = function () { bus.$off(eventName, handler); originalDestroy.call(this); } } }, /** * 触发事件 * @param eventName 要触发的事件名称 * @param data 事件对象 */ emit(eventName, data = {}) { bus.$emit(eventName, data); } }; 第二步就是让这个公共汽车上路。开车了。在全局引入 import eventBus from ‘./eventBus‘ Vue.prototype.$eventBus = eventBus; 第三步就是放东西。传值这里通过emit这个方法进行传递。一般是放在函数里调用。 getNum(){ this.$eventBus.emit("haha","我是值") } 第四步就是拿下来咯,一般写在mounted里面,这样可以避免一个多次触发的问题。当然可以自己写在函数里试一试。 mounted() { this.$eventBus.on( "haha", function(data) { console.log(data); }, this ); },