Angular преобразуется из HttpModule в HttpClientModule и отказывается от первого, как подробно описано в Разница между HTTP и HTTPClient в angular 4?.
Однако в руководстве по Angular на странице https://angular.io/tutorial/toh-pt6 используется HttpModule , в то время как информация об основах на https://angular.io/guide/http использует HttpClientModule, как подробно описано на https://github.com/angular/angular/issues/19280. Сравнение усложняется тем, что в учебнике используется сервер в памяти, в то время как в Основах используется реальный веб-сервер.
Я попытался переключиться с HttpModule на HttpClientModule в учебном коде Angular, используя реальный веб-сервер, и некоторые части работают, но другие не работают. Кажется, удалось изменить один из методов getHeroes в hero.services.ts с
getHeroes(): Promise<Hero[]> {
return this.http.get(this.heroesUrl)
.toPromise()
.then(response => response.json().data as Hero[])
.catch(this.handleError);
}
to
getHeroes(): Promise<Hero[]> {
return this.httpClient.get(this.heroesUrl)
.toPromise()
.then(data => data['heroes'] as Hero[])
.catch(this.handleError);
}
хотя могут быть способы улучшить это, и в этой версии могут быть проблемы, которых я еще не обнаружил.
Но я не вижу эквивалента для метода поиска в hero-search.service.ts
search(term: string): Observable<Hero[]> {
return this.http
.get(`api/heroes/?name=${term}`)
.map(response => response.json().data as Hero[]);
}
Можно обойтись без карты, но вы не можете использовать тот же подход, что и выше, потому что есть Observable вместо Promise, и вы получаете такие ошибки, как:
Type 'Observable<Object>' is not assignable to type 'Observable<Hero[]>'.
Кто-нибудь преобразовал демонстрацию Heroes в руководстве по Angular для использования HttpClientModule или знает, как преобразовать приведенный выше код поиска?