我想知道何时以及为什么组件无法处理正在监听的第一个$ on事件。 我有这个函数,当被调用时会触发2个事件:
initModalTimer: function () {
serverBus.$emit('initSettingsModal', {
'name': 'Timer',
});
serverBus.$emit('initTimer', {
'timer_type': this.timer_type,
});
}
InitSettingsModal 传递模式信息:
//Modal Component
<template>
<div v-else-if="elementName === 'Timer'">
<timer></timer>
</div>
<div v-else-if="elementName === 'Socials'">
<socials></socials>
</div>
</template>
<script>
//Other Vue stuff
created() {
serverBus.$on('initSettingsModal', (elem_identifier) => {
this.elementName = elem_identifier["name"];
});
}
</script>
第二个事件在基于模式组件中的v-if加载的组件中处理(在此示例中为te组件计时器):
//Timer Component
created() {
serverBus.$on('initTimer', (response) => {
//Execute code
});
}
但是第一个'initTimer'从未触发。当我再次执行第一个函数(initModalTimer)时,一切正常。
我在Reddit上发现了类似的问题,有人提出“事件总线在$ emit之后监听$ on”。但是我不明白这是什么意思。
答案 0 :(得分:1)
我认为这是在您的initTimer
组件通过<timer>
语句呈现之前,您的v-else-if
侦听器未注册。
您将需要找到一种在事件触发之前注册该侦听器的方法,方法是在组件树中进一步注册该侦听器,或者更早地将其包括在计时器组件中,但将其隐藏起来直到需要使用为止。
答案 1 :(得分:1)
可能将$ on事件放在函数 created()上。这个对我有用!