@kkomissarov

Почему не срабатывает пользовательское событие Vue в блоке then?

Хочу по клику на кнопку сделать запрос на сервер, а когда будет получен ответ, вызвать пользовательское событие и передать его в родительский компонент:

onAddWordSubmit(){
      this.$emit('change-state', 'loading');

      this.axios.post('http://127.0.0.1:8000/api/v1.0/word/create/', {
        'word': this.word,
        'translate': this.translate,
        'context': this.context
      })
      .then(()=>{
        this.$emit('change-state', 'wordarea');
      });


Проблема в том, что в блоке then событие не срабатывает. this - это компонент vue, т.е. с контекстом все ок. Если вытащить эту строчку из функции, то она срабатывает нормально (но асинхронно, не дожидаясь ответа). В чем тут может быть дело?

Для полной картины вот ссылка на гитхаб: https://github.com/kkomissarov/anki
Эта проблема в блоке src/components/AddWordComponent.vue
  • Вопрос задан
  • 177 просмотров
Решения вопроса 1
zorar4ik
@zorar4ik
Full stack overflow
Вы используете динамический компонент, изначально у Вас рендерится wordarea, по отправке запроса вы переключаете динамический компонент на другой, в этот момент ваш компонент wordarea уничтожается и на его месте создается компонент loading, и соответственно после уничтожения wordarea отвязываются все подписаные события и по факту вы пытаетесь получить событие 'change-state' уже у компонента loading

Вы можете попробовать обернуть в keep-alive и компоненты при переключении удаляться не будут
<keep-alive>
<component
  v-bind:is="currentComponent"
  v-on:change-state="changeState($event)">
</component>
<keep-alive>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы