1. 非父子组件之间数据交互
1.1. 单独的事件中心管理组件间的通信
var eventHub = new Vue();
1.2. 监听事件
eventHub.$on('event-name', fun);
1.3. 销毁事件
eventHub.$off('event-name');
1.4. 触发事件
eventHub.$emit('event-name', param);
1.5. 图解
1.6. 代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>非父子组件之间数据交互</title>
</head>
<body>
<div id="app">
<div>父组件</div>
<div><button @click='handle'>销毁事件</button></div><br /><br />
<plus-zs></plus-zs><br />
<minus-zs></minus-zs>
</div>
<script type="text/javascript" src="vue.min.js"></script>
<script type="text/javascript">
// 单独的事件中心管理组件间的通信
var eventHub = new Vue();
Vue.component('plus-zs', {
data: function(){
return {
num: 0
}
},
template: `
<div>
<div>lisi: {{num}}</div>
<div><button @click='handle'>加zs</button></div>
</div>
`,
methods: {
handle: function(){
eventHub.$emit('plus-event', 2);
}
},
mounted: function() {
eventHub.$on('minus-event', (val) => {
this.num -= val;
});
}
});
Vue.component('minus-zs', {
data: function(){
return {
num: 0
}
},
template: `
<div>
<div>zhangsan: {{num}}</div>
<div><button @click='handle'>减ls</button></div>
</div>
`,
methods: {
handle: function(){
// 触发事件
eventHub.$emit('minus-event', 1);
}
},
mounted: function() {
// 监听事件
eventHub.$on('plus-event', (val) => {
this.num += val;
});
}
});
var vm = new Vue({
el: "#app",
methods: {
handle: function(){
// 销毁事件
eventHub.$off('minus-event');
eventHub.$off('plus-event');
}
}
});
</script>
</body>
</html>
1.7. 效果图
1.8. 点击加zs按钮
1.9. 点击减ls按钮