У меня несколько странная проблема с EventEmitter в классе. Хотя у меня есть несколько идей, как обойти эту проблему, я хотел бы спросить вас, есть ли у вас идея напрямую решить мою проблему.
Краткое резюме
У меня есть родительский и дочерний компоненты. Родительский компонент хотел бы получать уведомление, когда что-то в дочернем было изменено.
Внутри дочернего элемента у нас есть кнопка. При щелчке он выполняет HTTP-запрос, который изменяет данные. В части кода subscribe
я хотел бы сообщить родительскому классу, что что-то было сделано.
Это ломает идею и работает так, как ожидалось: https://stackblitz.com/edit/angular-l7hafr < / а>
Проблема
В моем приложении событие дочернего компонента никогда не генерируется, пока оно выполняется в subscribe
запроса http
. Если я испущу событие раньше (вне функции подписки), оно будет работать должным образом.
Что я пробовал
Я пытался найти причину. Проблема в том, что мне просто не удается изолировать проблему. Приведенный выше Stackblitz работает так, как ожидалось, а в моем приложении - нет.
В других сообщениях, связанных с этим вопросом, предлагалось выполнить .emit()
в бегуне NgZone следующим образом:
this.ngZone.run(() => {
console.log(NgZone.isInAngularZone());
this.dataHasChanged.emit();
});
Я реализовал это в обратном вызове подписки, но в результате консоль регистрирует true
, но тестовое событие все еще никогда не генерируется.
Как это вообще возможно? Что я могу сделать?
РЕДАКТИРОВАТЬ
Итак, я наконец смог изолировать проблему, и это продемонстрировано в этом очень маленьком примере: https://stackblitz.com/edit/angular-46pndy.
Причина всех проблем в getter
для массива. Почему здесь возникает проблема?