基本用法
- 这种通过创建一个空的 vue 实例的方式,相当于创建了一个事件中心或者说是中转站,用来传递和接收事件。
- 这种方式同样适用于任何组件间的通信,包括父子、兄弟、跨级,对于通信需求简单的项目比较方便.
- 但对于更复杂的情况,或者项目比较大时,可以使用 vue 提供的更复杂的状态管理模式 Vuex 来进行处理。
import Vue from 'vue';
export default new Vue();
import eventBus from '@/utils/eventBus.js'
eventBus.$emit('bus','hello')
import eventBus from '@/utils/eventBus.js'
eventBus.$on('bus', msg => {
console.log(msg)
}
使用案例
DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>title>
head>
<body>
<div id="app">
<mycontent>mycontent>
<myfooter>myfooter>
div>
<template id="footer">
<ul class="nav">
<li @click="goContent('home')">首页li>
<li @click="goContent('list')">分类li>
<li @click="goContent('cart')">购物车li>
<li @click="goContent('me')">我的li>
ul>
template>
<template id="content">
<div class="con">内容页显示的数据是:{{text}}div>
template>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script>
<script>
var bus = new Vue();
var myfooter = {
template: '#footer',
methods: {
goContent(type) {
bus.$emit('myevent', type);
}
}
}
var mycontent = {
data() {
return {
text: ""
}
},
template: '#content',
mounted() {
bus.$on('myevent', (data) => {
console.log(data);
this.text = data;
});
}
}
var app = new Vue({
el: "#app",
data: {
},
components: {
myfooter,
mycontent
}
})
script>
body>
html>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 运行结果:点击首页后显示的数据
