我正在使用 Vue 2.0-rc.6(目前最新)和 Vue-router 2.0-rc.5(目前最新)。
我尝试this.$emit('custom-event')
在我的一个路由器组件和this.$on('custom-event', () => { console.log('I heard an event') })
我的 Vue 实例中执行此操作,但未监听该事件。路由器组件本身听到了事件,但没有听到 Vue 实例。
任何的想法?
看看这个jsfiddle。
我正在使用 Vue 2.0-rc.6(目前最新)和 Vue-router 2.0-rc.5(目前最新)。
我尝试this.$emit('custom-event')
在我的一个路由器组件和this.$on('custom-event', () => { console.log('I heard an event') })
我的 Vue 实例中执行此操作,但未监听该事件。路由器组件本身听到了事件,但没有听到 Vue 实例。
任何的想法?
看看这个jsfiddle。
来自 $emit 的事件不会传播到父实例。父级必须在模板中的组件上主动监听它。
<router-view @eventname="callbackMethod" />
感谢http://forum.vuejs.org/topic/5235/vue-2-0-instance-is-not-hearing-events-emitted-by-vue-router-components/2中的 LinusBorg 指出来自 $emit 的事件不会传播到父实例。
虽然使用 LinusBorg 建议的解决方案,但我并没有让它工作。相反,我通过做this.$router.app.$emit('eventname')
使用观察者我们可以实现同样的事情,意味着当我的路线更新时,我们可以通过观察者捕捉事件。
watch: {
'$route': function(to, from) {
console.log('To :', to.path); // current route
console.log('from:', from.path); // old route
}
}