Объединить два наблюдаемых в ngAfterViewInit()
Эта ошибка связана с this.events$, инициализированным в ngOnInit()
Этот вопрос очень похож на другие, но все же немного отличается, когда дело доходит до времени выполнения.
У меня есть простой почтовый индекс, чтобы объединить два наблюдаемых, как:
zip(this.eventService.searchedEvent$, this.events$)
.subscribe(([input, events]) => console.log(input, events))
Проблема в том, что я не хочу выполнять это в ngOnInit(), где он полностью работает нормально. Моя цель состоит в том, чтобы выполнить его в ngAfterViewInit() при загрузке данных. Поток приложения:
Загрузить данные в компоненте с помощью ngOnInit().
Извлечь значение из панели поиска через сервис, как здесь: https://angular.io/guide/component-interaction
Получить значения из сервиса в ngAfterViewInit()
Обратите внимание, что, когда я просто делаю подписку () на наблюдаемый, это работает:
ngAfterViewInit() {
// this.eventService.searchedEvent$.subscribe(console.log)
}
К сожалению, мне нужно объединить наблюдаемый из входных данных поиска и наблюдаемый источник данных, поэтому я пытаюсь объединить их обоих:
ngAfterViewInit() {
zip(this.eventService.searchedEvent$, this.events$)
.subscribe(([input, events]) => console.log(input, events))
}
Но все равно он не выстрелил. Почему это работает в ngOnInit(), а не в ngAfterViewInit(), когда простая подписка генерируется динамически в ngAfterViewInit()? Любое решение для этого?
РЕДАКТИРОВАТЬ:
ngOnInit() {
this.isLoading$ = this.store.pipe(select(selectEventsLoading))
this.events$ = this.paginationService.page$.pipe(
switchMap(pageIndex => this.store.pipe(
delay(0),
select(selectEventsPageByGenre(this.musicGenre, { pageIndex: pageIndex, pageSize: PAGE_SIZE })),
map(events => {
if (events.length > 0) {
return events;
}
this.store.dispatch(new EventsPageRequested({
musicGenre: genreToEnum(this.musicGenre),
page: {
pageIndex: pageIndex,
pageSize: PAGE_SIZE
}
}));
return [];
}),
tap(events => {
this.isEmpty$ = of(this.isListEmpty(events))
this.paginationService.isIncrementEnabled(events)
})
))
);
Я заметил, что использование zip в ngOnInit() возвращает значения до первого удаления символа, например:
- вставить символы:
- вход: 'a' -> испускать 'a'
- вход: 'ab' -> испускать 'ab'
- вход: 'abc' -> испускать 'avc'
- удалить 1 символ:
- вход: 'ab' -> ничего не излучается,
- повторить:
- input: 'abc' -> ничего не генерируется,