【发布时间】:2016-07-22 05:39:54
【问题描述】:
我正在尝试使用空的 new Vue 实例创建事件总线。该应用程序足够大,可以拆分为多个组件文件。例如,我的应用程序结构为:
main.js
import Vue from vue;
window.bus = new Vue();
Vue.component('update-user', require('./components/update-user');
Vue.component('users-list', require('./components/users-list');
Vue.component('edit-user', require('./components/edit-user');
Vue.component('user-address', require('./components/user-address');
new Vue({
el:'body',
ready(){
}
});
组件/update-user.js
export default{
template: require('./update-user.template.html'),
ready(){
bus.$emit('test-event', 'This is a test event from update-user');
}
}
组件/用户列表.js
export default{
template:require('./users-list.template.html'),
ready(){
bus.$on('test-event', (msg) => { console.log('The event message is: '+msg)});
//outputs The event message is: This is a test event
}
components/edit-user.js
export default{
template:require('./edit-user.template.html'),
ready(){
bus.$on('test-event', (msg) => {console.log('Event message: '+msg)});
//doesn't output anything
console.log(bus) //output shows vue instance with _events containing 'test-event'
}
}
组件/用户地址.js
export default{
template:require('./user-address.template.html'),
ready(){
bus.$on('test-event', () => {console.log('Event message: ' +msg)});
//doesn't output anything
console.log(bus) //output shows vue instance with _events containing 'test-event'
}
}
index.html
...
<body>
<update-user>
<users-list></users-list>
<edit-user>
<user-address></user-address>
</edit-user>
</update-user>
</body>
...
我的问题是为什么bus.$on 只在第一个子组件中工作?即使我从<users-list> 中删除侦听器,其他组件都无法侦听该事件,即console.log() with bus.$on 在<users-list> i.e. the immediate child component 下方/之后的任何组件中都不起作用。
我错过了什么或者我做错了什么?
如何让它工作,以便任何深度的任何子组件都可以监听从根组件或层次结构中更高位置发出的事件,反之亦然?
【问题讨论】:
标签: vue.js