import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { HttpClientModule } from '@angular/common/http'; @NgModule({ imports: [ BrowserModule, // import HttpClientModule after BrowserModule. HttpClientModule, ], declarations: [ AppComponent, ], bootstrap: [ AppComponent ] }) export class AppModule {}复制代码
import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; @Injectable() export class ConfigService { constructor(private http: HttpClient) { } }复制代码
export interface Config { heroesUrl: string; textfile: string; }复制代码
configUrl = 'assets/config.json'; getConfig() { // now returns an Observable of Config return this.http.get<Config>(this.configUrl); } //等效于 getConfig():Observable<Config> { // now returns an Observable of Config return this.http.get<Config>(this.configUrl); }复制代码
config: Config; showConfig() { this.configService.getConfig() .subscribe((data: Config) => this.config = { heroesUrl: data['heroesUrl'], textfile: data['textfile'] }); // or .subscribe((data: Config) => this.config = { ...data }); }复制代码
getConfigResponse(): Observable<HttpResponse<Config>> { return this.http.get<Config>( this.configUrl, { observe: 'response' }); }复制代码
showConfigResponse() { this.configService.getConfigResponse() // resp is of type `HttpResponse<Config>` .subscribe(resp => { // display its headers const keys = resp.headers.keys(); this.headers = keys.map(key => `${key}: ${resp.headers.get(key)}`); // access the body directly, which is typed as `Config`. this.config = { ... resp.body }; }); }复制代码
getTextFile(filename: string) { // The Observable returned by get() is of type Observable<string> // because a text response was specified. // There's no need to pass a <string> type parameter to get(). return this.http.get(filename, {responseType: 'text'}) .pipe( tap( // Log the result or error data => this.log(filename, data), error => this.logError(filename, error) ) ); }复制代码
import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { HttpClientModule } from '@angular/common/http'; import {HttpClientJsonpModule} from '@angular/common/http'; @NgModule({ imports: [ BrowserModule, // import HttpClientModule after BrowserModule. HttpClientModule, HttpClientJsonpModule ], declarations: [ AppComponent, ], bootstrap: [ AppComponent ] }) export class AppModule {}复制代码
searchHeroes(term: string): Observable { // 利用subscribe订阅成功数据 term = term.trim(); let heroesURL = `${this.heroesURL}?${term}`; return this.http.jsonp(heroesUrl, 'callback').pipe( catchError(this.handleError('searchHeroes', []) // then handle the error ); };复制代码
addHero (hero: Hero): Observable<Hero> { return this.http.post<Hero>(this.heroesUrl, hero, httpOptions) .pipe( catchError(this.handleError('addHero', hero)) ); }复制代码
this.heroesService .addHero(newHero) .subscribe(hero => this.heroes.push(hero));复制代码
updateHero (hero: Hero): Observable<Hero> { return this.http.put<Hero>(this.heroesUrl, hero, httpOptions) .pipe( catchError(this.handleError('updateHero', hero)) ); }复制代码
this.heroesService.updateHero(hero);复制代码
deleteHero (id: number): Observable<{}> { const url = `${this.heroesUrl}/${id}`; // DELETE api/heroes/42 return this.http.delete(url, httpOptions) .pipe( catchError(this.handleError('deleteHero')) ); }复制代码
this.heroesService .deleteHero(hero.id) .subscribe();复制代码
import { HttpHeaders } from '@angular/common/http'; const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Authorization': 'my-auth-token' }) };复制代码
httpOptions.headers = httpOptions.headers.set('Authorization', 'my-new-auth-token');复制代码
getConfig() { return this.http.get<Config>(this.configUrl) .pipe( catchError(this.handleError) ); }复制代码
getConfig() { return this.http.get<Config>(this.configUrl) .pipe( retry(3), // retry a failed request up to 3 times catchError(this.handleError) // then handle the error ); }复制代码
showConfig() { this.configService.getConfig() .subscribe( (data: Config) => this.config = { ...data }, // success path error => this.error = error // error path ); }复制代码
本文作者:前端首席体验师(CheongHu)联系邮箱:simple2012hcz@126.com版权声明: 本文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!