Объединить два наблюдаемых в ngAfterViewInit()

Эта ошибка связана с this.events$, инициализированным в ngOnInit()

Этот вопрос очень похож на другие, но все же немного отличается, когда дело доходит до времени выполнения.

У меня есть простой почтовый индекс, чтобы объединить два наблюдаемых, как:

zip(this.eventService.searchedEvent$, this.events$)
    .subscribe(([input, events]) => console.log(input, events))

Проблема в том, что я не хочу выполнять это в ngOnInit(), где он полностью работает нормально. Моя цель состоит в том, чтобы выполнить его в ngAfterViewInit() при загрузке данных. Поток приложения:

  1. Загрузить данные в компоненте с помощью ngOnInit().

  2. Извлечь значение из панели поиска через сервис, как здесь: https://angular.io/guide/component-interaction

  3. Получить значения из сервиса в 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' -> ничего не генерируется,

0 ответов

Другие вопросы по тегам