vue-bus
一个 Vue.js 事宜中间插件,同时支撑 Vue 1.0 和 2.0
缘由
Vue 2.0 从新梳理了事宜体系,由于基于组件树构造的事宜流体式格局实在是让人难以明白,并且在组件构造扩大的历程中会变得愈来愈软弱。虽然依旧保留了父子组件间的事宜流,但有诸多限定,比方不支撑跨多层父子组件通讯,也没有处理兄弟组件间的通讯题目。
Vue 引荐运用一个全局事宜中间来分发和治理运用内的一切事宜,详见文档。这是一个最好实践,同时适用于 Vue 1.0 和 2.0。你固然能够声明一个全局变量来运用事宜中间,但你假如在运用 webpack 之类的模块体系,这明显不合适。每次运用都手动 import 进来也很不轻易,所以就有了这个插件:vue-bus
vue-bus 供应了一个全局事宜中间,并将其注入每个组件,你能够像运用内置事宜流一样轻易的运用全局事宜。
装置
$ npm install vue-bus
假如在一个模块化工程中运用它,必需要经由过程 Vue.use()
明确地装置 vue-bus:
import Vue from 'vue';
import VueBus from 'vue-bus';
Vue.use(VueBus);
假如运用全局的 script 标签,则不必云云(手动装置)。
运用
监听事宜和消灭监听
// ...
created() {
this.$bus.on('add-todo', this.addTodo);
this.$bus.once('once', () => console.log('这个监听器只会触发一次'));
},
beforeDestroy() {
this.$bus.off('add-todo', this.addTodo);
},
methods: {
addTodo(newTodo) {
this.todos.push(newTodo);
}
}
触发事宜
// ...
methods: {
addTodo() {
this.$bus.emit('add-todo', { text: this.newTodoText });
this.$bus.emit('once');
this.newTodoText = '';
}
}
注重:$bus.on
$bus.once
$bus.off
$bus.emit
只是 $bus.$on
$bus.$once
$bus.$off
$bus.$emit
的别号。 详见 API。
项目地点
GitHub,喜好的话给个 Star 吧 :P