6: Get Data from a Server
authorKai Moritz <kai@juplo.de>
Sat, 30 May 2020 07:45:01 +0000 (09:45 +0200)
committerKai Moritz <kai@juplo.de>
Sat, 30 May 2020 07:45:01 +0000 (09:45 +0200)
i) Heroes and HTTP - Update heroes

src/app/hero-detail/hero-detail.component.html
src/app/hero-detail/hero-detail.component.ts
src/app/hero.service.spec.ts
src/app/hero.service.ts

index 540f0f0..f3da802 100644 (file)
@@ -10,4 +10,5 @@
     </label>
   </div>
 </div>
+<button (click)="save()">save</button>
 <button (click)="goBack()">go back</button>
index 76e7912..caeb796 100644 (file)
@@ -37,6 +37,11 @@ export class HeroDetailComponent implements OnInit {
     });
   }
 
+  save(): void {
+    this.heroService.updateHero(this.hero)
+      .subscribe(() => this.goBack());
+  }
+
   goBack(): void {
     this.location.back();
   }
index 7730d9f..407e8ce 100644 (file)
@@ -62,7 +62,7 @@ describe('HeroService', () => {
     });
   });
 
-  describe('#getHero', () => {
+    describe('#getHero', () => {
 
     it('should return an empty observable for an invalid id', () => {
 
index 75a002b..6df713d 100644 (file)
@@ -13,6 +13,9 @@ import { catchError, tap } from 'rxjs/operators';
 export class HeroService {
 
   heroesUrl = 'api/heroes';  // URL to web api
+  httpOptions = {
+    headers: new HttpHeaders({ 'Content-Type': 'application/json' })
+  };
 
   constructor(
     private http: HttpClient,
@@ -38,6 +41,14 @@ export class HeroService {
     );
   }
 
+  /** PUT: update the hero on the server */
+  updateHero(hero: Hero): Observable<any> {
+    return this.http.put(this.heroesUrl, hero, this.httpOptions).pipe(
+      tap(_ => this.log(`updated hero id=${hero.id}`)),
+      catchError(this.handleError<any>('updateHero'))
+    );
+  }
+
   /**
    * Handle Http operation that failed.
    * Let the app continue.