javascript - Vue $on 事件第一次使用事件总线时不会触发

标签 javascript vue.js vuejs2

我想知道组件何时以及为何无法处理正在监听的第一个 $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上发现了类似的问题有人建议“事件总线监听 $on 发生在 $emit 之后”。但我不明白这是什么意思。

最佳答案

我认为发生的事情是你的 initTimer直到您的 <timer> 才注册监听器组件通过您的 v-else-if 呈现陈述。

您需要找到一种方法在事件触发之前注册该监听器,方法是将其进一步注册到组件树中,或者更早地包含计时器组件,但在需要时将其隐藏在 View 中。

关于javascript - Vue $on 事件第一次使用事件总线时不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57218294/

相关文章:

javascript - 错误: undefined in React useContext and useReducer

javascript - 仅在浏览器中加载 requirejs 中的模块,而不是在 Nodejs 中加载模块

javascript - 自定义 v-on :click. 阻止功能

javascript - Vue.js 没有自动更新

javascript - Vue.js 2.x v-for 在 <table> 中不起作用(属性或方法未定义)

javascript - 保留 jquery ui 选项卡的状态

Vue.js 嵌套路由与默认 child

vuejs2 - Vue js安装滚动到特定的div

vue.js - Vue模型不更新

javascript - 在 ajax 调用后使用 html() 插入选项后选择不起作用(Bootstrap Selectpicker)