Угловой преобразователь НЕ возвращает ничего, когда возвращаемое значение является наблюдаемым, созданным с помощью функции .asObservable () - PullRequest
0 голосов
/ 27 октября 2019

Я просто пытаюсь смоделировать мои http-вызовы с помощью простого BehaviorSubject и Observable свойств в моей службе распознавания. Я не понимаю, почему не работает следующее:

schedule-Administration.service.ts:

@Injectable({
  providedIn: 'root'
})
export class ScheduleAdministrationService implements OnInit, Resolve<Observable<SportType[]>> {
  private _sportTypesSubject = new BehaviorSubject<SportType[]>([]);
  sportTypes$: Observable<SportType[]> = this._sportTypesSubject.asObservable();  

  constructor(private leagueAdminService: LeagueAdministrationService) {}

  resolve(): Observable<SportType[]> | Observable<Observable<SportType[]>> | Promise<Observable<SportType[]>> {
    this._sportTypesSubject.next([...])
    return this.sportTypes$;    
  }
}

Я думал, что метод разрешения должен подписатьсяк возвращаемому наблюдаемому? Когда я вручную делаю this.sportTypes$.subscribe(v => console.log(v)), он корректно записывает значения ....

1 Ответ

1 голос
/ 27 октября 2019

Проблема вашей конструкции в том, что вы изначально используете BehaviorSubject. Угловой маршрутизатор ожидает, что результат вашего резольвера будет завершен до возврата данных. Поэтому, используя BehaviorSubject, предположите, что у вас есть только одно значение за раз, но значение всегда может измениться.

Чтобы сделать эту работу, я думаю, что вы можете взять только первый испущенный ответ / значение, например, используя оператор first:

resolve(): Observable<SportType[]> | Observable<Observable<SportType[]>> | Promise<Observable<SportType[]>> {
    return this._sportTypesSubject.asObservable().pipe(first())    
}

Согласно документации Angular

Класс провайдера данных может использоваться с маршрутизатором для разрешения данных во время навигации. Интерфейс определяет метод resol (), который будет вызываться при запуске навигации. Затем маршрутизатор будет ожидать разрешения данных, прежде чем маршрут будет окончательно активирован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...