Есть способ сделать это, если вы не хотите реализовывать шину событий, как предложено выше (что я, вероятно, хотел бы).Дети могут $emit
события, которые могут услышать прямые родители и не более.Так что, если я вас правильно понимаю, и у вас есть следующая структура компонентов,
<programme v-on:expired="setNewQuestion">
<question v-on:expired="handleExpired">
<countdown v-on:oncountdownend="onCountdownEnd" />
</question>
</programme>
способ сделать то, что вы просите, это выдать событие под названием expired
в вашей функции onCountdownEnd
в пределахКомпонент <countdown />
, как показано ниже
// in the <countdown> component
methods: {
onCountdownEnd(somedata) {
this.$emit("expired", somedata)
}
}
, а затем в его родительском компоненте question
будет прослушиватель, ожидающий отправленное вами событие, под названием expired
, и также $emit
событие для его родителя, как показано ниже
// in the <question> component
methods: {
handleExpired(somedata) {
this.$emit("expired", somedata)
}
}
и, наконец, в верхнем родительском элементе programme
у вас также будет прослушиватель для события, которое я снова назвал expired
выше,при запуске запускается функция, как показано ниже
// in the <programme> component
methods: {
setNewQuestion(somedata) {
// do something with the data or tick over to new question etc
}
}
Надеюсь, это поможет и имело смысл.Не стесняйтесь сообщать, если у вас есть какие-либо вопросы!