src/app/providers/hero.service.ts
Properties |
|
Methods |
|
constructor(http: HttpClient, messageService: MessageService)
|
|||||||||
|
Defined in src/app/providers/hero.service.ts:17
|
|||||||||
|
Parameters :
|
| addHero | ||||||
addHero(hero: Hero)
|
||||||
|
Defined in src/app/providers/hero.service.ts:70
|
||||||
|
POST: add a new hero to the server
Parameters :
Returns :
Observable<Hero>
|
| deleteHero | ||||||
deleteHero(hero: Hero | number)
|
||||||
|
Defined in src/app/providers/hero.service.ts:78
|
||||||
|
DELETE: delete the hero from the server
Parameters :
Returns :
Observable<Hero>
|
| getHero | ||||||
getHero(id: number)
|
||||||
|
Defined in src/app/providers/hero.service.ts:47
|
||||||
|
GET hero by id. Will 404 if id not found
Parameters :
Returns :
Observable<Hero>
|
| getHeroes |
getHeroes()
|
|
Defined in src/app/providers/hero.service.ts:24
|
|
GET heroes from the server
Returns :
Observable<Hero[]>
|
| getHeroNo404 | ||||||
getHeroNo404(id: number)
|
||||||
|
Defined in src/app/providers/hero.service.ts:33
|
||||||
Type parameters :
|
||||||
|
GET hero by id. Return
Parameters :
Returns :
Observable<Hero>
|
| Private handleError | |||||||||||||||
handleError(operation: string, result?: T)
|
|||||||||||||||
|
Defined in src/app/providers/hero.service.ts:102
|
|||||||||||||||
Type parameters :
|
|||||||||||||||
|
Handle Http operation that failed. Let the app continue.
Parameters :
Returns :
(error: any) => any
|
| Private log | ||||||
log(message: string)
|
||||||
|
Defined in src/app/providers/hero.service.ts:117
|
||||||
|
Log a HeroService message with the MessageService
Parameters :
Returns :
void
|
| searchHeroes | ||||||
searchHeroes(term: string)
|
||||||
|
Defined in src/app/providers/hero.service.ts:56
|
||||||
|
Parameters :
Returns :
Observable<Hero[]>
|
| updateHero | ||||||
updateHero(hero: Hero)
|
||||||
|
Defined in src/app/providers/hero.service.ts:89
|
||||||
|
PUT: update the hero on the server
Parameters :
Returns :
Observable<any>
|
| Private heroesUrl |
heroesUrl:
|
Type : string
|
Default value : 'api/heroes'
|
|
Defined in src/app/providers/hero.service.ts:17
|
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable, of } from 'rxjs';
import { catchError, map, tap } from 'rxjs/operators';
import { Hero } from '../hero';
import { MessageService } from './message.service';
const httpOptions = {
headers: new HttpHeaders({ 'Content-Type': 'application/json' })
};
@Injectable({ providedIn: 'root' })
export class HeroService {
private heroesUrl = 'api/heroes'; // URL to web api
constructor(
private http: HttpClient,
private messageService: MessageService) { }
/** GET heroes from the server */
getHeroes (): Observable<Hero[]> {
return this.http.get<Hero[]>(this.heroesUrl)
.pipe(
tap(_ => this.log('fetched heroes')),
catchError(this.handleError('getHeroes', []))
);
}
/** GET hero by id. Return `undefined` when id not found */
getHeroNo404<Data>(id: number): Observable<Hero> {
const url = `${this.heroesUrl}/?id=${id}`;
return this.http.get<Hero[]>(url)
.pipe(
map(heroes => heroes[0]), // returns a {0|1} element array
tap(h => {
const outcome = h ? `fetched` : `did not find`;
this.log(`${outcome} hero id=${id}`);
}),
catchError(this.handleError<Hero>(`getHero id=${id}`))
);
}
/** GET hero by id. Will 404 if id not found */
getHero(id: number): Observable<Hero> {
const url = `${this.heroesUrl}/${id}`;
return this.http.get<Hero>(url).pipe(
tap(_ => this.log(`fetched hero id=${id}`)),
catchError(this.handleError<Hero>(`getHero id=${id}`))
);
}
/* GET heroes whose name contains search term */
searchHeroes(term: string): Observable<Hero[]> {
if (!term.trim()) {
// if not search term, return empty hero array.
return of([]);
}
return this.http.get<Hero[]>(`${this.heroesUrl}/?name=${term}`).pipe(
tap(_ => this.log(`found heroes matching "${term}"`)),
catchError(this.handleError<Hero[]>('searchHeroes', []))
);
}
//////// Save methods //////////
/** POST: add a new hero to the server */
addHero (hero: Hero): Observable<Hero> {
return this.http.post<Hero>(this.heroesUrl, hero, httpOptions).pipe(
tap((hero: Hero) => this.log(`added hero w/ id=${hero.id}`)),
catchError(this.handleError<Hero>('addHero'))
);
}
/** DELETE: delete the hero from the server */
deleteHero (hero: Hero | number): Observable<Hero> {
const id = typeof hero === 'number' ? hero : hero.id;
const url = `${this.heroesUrl}/${id}`;
return this.http.delete<Hero>(url, httpOptions).pipe(
tap(_ => this.log(`deleted hero id=${id}`)),
catchError(this.handleError<Hero>('deleteHero'))
);
}
/** PUT: update the hero on the server */
updateHero (hero: Hero): Observable<any> {
return this.http.put(this.heroesUrl, hero, httpOptions).pipe(
tap(_ => this.log(`updated hero id=${hero.id}`)),
catchError(this.handleError<any>('updateHero'))
);
}
/**
* Handle Http operation that failed.
* Let the app continue.
* @param operation - name of the operation that failed
* @param result - optional value to return as the observable result
*/
private handleError<T> (operation = 'operation', result?: T) {
return (error: any): Observable<T> => {
// TODO: send the error to remote logging infrastructure
console.error(error); // log to console instead
// TODO: better job of transforming error for user consumption
this.log(`${operation} failed: ${error.message}`);
// Let the app keep running by returning an empty result.
return of(result as T);
};
}
/** Log a HeroService message with the MessageService */
private log(message: string) {
this.messageService.add(`HeroService: ${message}`);
}
}