HTTP получить вызов в Angular 6 - PullRequest
0 голосов
/ 08 июня 2018

Я обновил свой Angular-проект до Angular 6 и не знаю, как выполнять http-запросы на получение.Вот как я это сделал в Angular 5:

get(chessId: string): Observable<string> {

this.loadingPanelService.text = 'Loading...';
this.loadingPanelService.isLoading = true;

const url = `${this.apiPathService.getbaseUrl()}api/chess/${chessId}/rating`;   

return this.http.get<string>(url)
.catch((error) => {
    console.error('API error: ', error);

    this.loadingPanelService.isLoading = false;
    this.notificationService.showErrorMessage(error.message);

    return Observable.of(null);
  })
  .share()
  .finally(() => {
    this.loadingPanelService.isLoading = false;
  });

И вот как я это делаю сейчас.Так должно быть в Angular 6?

...
return this.http.get<string>(url)
.pipe(
  catchError(this.handleError),
  share(),
  finalize(() =>{this.loadingPanelService.isLoading = false})
);

private handleError(error: HttpErrorResponse) {
console.error('API error: ', error);

this.loadingPanelService.isLoading = false;
this.notificationService.showErrorMessage(error.message);

// return an observable with a user-facing error message
return throwError(
  'Something bad happened; please try again later.');
};

Ответы [ 2 ]

0 голосов
/ 16 июля 2018

То, как вы называете http в angular 6, правильное. Хотя я делюсь фрагментом кода, просто имейте в виду, что мы можем передать число операторов в pipe и все возвращает наблюдаемый объект. Так что вам не нужно явнопреобразуйте этот оператор в Observable.

import { Http, Response } from '@angular/http'
import { throwError } from 'rxjs';
import { map, catchError } from 'rxjs/operators';

.....
 return this.http.get(url)
    .pipe(map((response : Response) => {
        return response.json();   
    }), catchError((error: Response) =>{
        this.loadingPanelService.isLoading = false;
        this.notificationService.showErrorMessage(error.message);
        return throwError('Something went wrong');      
    }), finalize(() => {
        this.loadingPanelService.isLoading = false;
    }));

Вы также можете использовать HttpClient.Если вы хотите получить ответ для httpClient, тогда, пожалуйста, оставьте свой вопрос отдельно.

Надеюсь, это поможет вам

0 голосов
/ 12 июня 2018

Это пример, но вы можете получить больше информации в https://angular.io/guide/http:

getByEmail(email): Observable<void> {   
    const endpoint = API_URL + `/api/datos_privados/email/${email}`;
    return this.httpClient.get<void>(endpoint,
        {
            headers: new HttpHeaders()
                .set('Accept', 'aplication/json')
        });
}
...