Угловое разрешение выполнения с наблюдаемым

В проекте angular 5 я хочу выполнить преобразователь до загрузки представления. Проблема в том, что данные, которые я хочу вернуть из преобразователя, зависят от наблюдаемого. Это код:

Резолвер:

@Injectable()
export class PlayersResolver implements Resolve<any> {
  constructor(private playersSrv: PlayersService) {
    this.playersSrv.getStandings();
  }

  resolve() {
    return this.playersSrv.standings$;
  }
}

Служба, используемая преобразователем:

@Injectable()
export class PlayersService {
  standingsSubject = new ReplaySubject<any>();
  standings$ = this.standingsSubject.asObservable();

  constructor(private http: HttpClient) {}

  getStandings(): void {
    this.http.get('http://localhost:8080/api/fixtures/standings')
      .subscribe((response: any) => {
        this.standingsSubject.next(response);
      });
  }
}

С помощью этого кода при попытке перейти к представлению отображается что угодно. Любая идея о том, как я могу реализовать решение для получения данных в моем компоненте?

Спасибо


person axl-code    schedule 22.12.2017    source источник
comment
Поверьте мне в этом; вы не хотите подписываться внутри службы.   -  person Jota.Toledo    schedule 22.12.2017
comment
Привет Jota.Toledo, почему бы и нет?   -  person axl-code    schedule 22.12.2017


Ответы (1)


1.Возврат наблюдаемого из сервисной функции. 2.Удалить подписку из сервиса. 3. Просто вызовите сервисную функцию в методе разрешения, который возвращает вызов сервисной функции inturn, которая возвращает наблюдаемый

resolve():observable<any>{
return  this.playersSrv.getStandings().map((data)=>{//do something with data})
}

4.Resolve guard автоматически подписывается на сервисный вызов и следующий маршрут загружается только после его разрешения

person Rohit Ramname    schedule 22.12.2017
comment
Извините, это не работает. Property 'map' does not exist on type 'Observable<Object>' - person axl-code; 22.12.2017
comment
попробуйте не возвращать наблюдаемое из службы... вы импортировали оператор? импортировать 'rxjs/добавить/оператор/карта'; getStandings() { return this.http.get('localhost:8080/api/fixtures/standings'< /а>)} - person Rohit Ramname; 22.12.2017
comment
О, это было. Спасибо!! - person axl-code; 22.12.2017