Я пытаюсь поделиться состоянием флага fileUploadInProgress из дочернего компонента в родительский компонент, используя привязку событий.
Начальное состояние флага ложно. Когда я отправляю запрос, я устанавливаю флаг в true и при получении правильного ответа устанавливаю его обратно в false, используя Eventemitter.emit ($ event)
Странно, первое событие отправляется, а второе - нет.
Я пытался создать это событие внутри setTimeout до первого события, и оно не работает. Я предполагаю, что это связано с тем, как работают циклы событий, но я не совсем уверен, почему.
Функция Uploadfiles в дочернем компоненте
uploadFiles(content) {
this.uploadInProgressEvent.emit(true); // works
setTimeout(() => {
this.uploadInProgressEvent.emit(false); // doesn't work
}, 0)
this.restClient.uploadUserFiles(content)
.subscribe((event) => {
this.uploadInProgressEvent.emit(false); // works
if (event.type === HttpEventType.UploadProgress) {
this.uploadInProgressEvent.emit(false); // doesn't work
} else if (event instanceof HttpResponse) {
this.uploadInProgressEvent.emit(false); // doesn't work
}
});
}
Вот как я использую привязку событий в родительском компоненте
<parent-component>
(uploadInProgressEvent)="logg($event)"
</parent-component>
Функция logg в основном записывает true / false независимо от того, что получено. На консоли печатаются только комментарии, помеченные // работами.
Я ожидаю, что источник событий всегда будет выдавать значение. Любые идеи о том, как я могу это исправить, приветствуются.