Skip to content
This repository was archived by the owner on Dec 4, 2017. It is now read-only.

Commit 1897f6d

Browse files
committed
docs(reactive-forms): converted HeroService to Observable
1 parent 60553d8 commit 1897f6d

File tree

7 files changed

+35
-33
lines changed

7 files changed

+35
-33
lines changed

public/docs/_examples/reactive-forms/ts/app/demo.component.html

+3-3
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@ <h4><i>Pick a demo:</i>
1818

1919
<div *ngIf="demo >= 5 && demo !== final" >
2020

21-
<p *ngIf="!heroes"><b><i>Loading heroes ... </i></b></p>
22-
<h3 *ngIf="heroes">Select a hero:</h3>
21+
<h3 *ngIf="isLoading"><i>Loading heroes ... </i></h3>
22+
<h3 *ngIf="!isLoading">Select a hero:</h3>
2323

2424
<nav>
2525
<button (click)="getHeroes()" class="btn btn-primary">Refresh</button>
26-
<a *ngFor="let hero of heroes" (click)="select(hero)">{{hero.name}}</a>
26+
<a *ngFor="let hero of heroes | async" (click)="select(hero)">{{hero.name}}</a>
2727
</nav>
2828

2929
<div *ngIf="selectedHero">

public/docs/_examples/reactive-forms/ts/app/demo.component.ts

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/* tslint:disable:member-ordering */
2-
import { Component } from '@angular/core';
2+
import { Component } from '@angular/core';
3+
import { Observable } from 'rxjs/Observable';
34

45
import { Hero } from './data-model';
56
import { HeroService } from './hero.service';
@@ -24,16 +25,17 @@ export class DemoComponent {
2425
final = this.demos.length;
2526
demo = this.final; // current demo
2627

27-
heroes: Hero[];
28+
heroes: Observable<Hero[]>;
29+
isLoading = false;
2830
selectedHero: Hero;
2931

3032
constructor(private heroService: HeroService) { }
3133

3234
getHeroes() {
35+
this.isLoading = true;
36+
this.heroes = this.heroService.getHeroes()
37+
.finally(() => this.isLoading = false);
3338
this.selectedHero = undefined;
34-
this.heroes = undefined;
35-
return this.heroService.getHeroes()
36-
.then(heroes => this.heroes = heroes);
3739
}
3840

3941
select(hero: Hero) { this.selectedHero = hero; }

public/docs/_examples/reactive-forms/ts/app/hero-detail.component.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ export class HeroDetailComponent implements OnChanges {
6565
// #docregion on-submit
6666
onSubmit() {
6767
this.hero = this.prepareSaveHero();
68-
this.heroService.updateHero(this.hero);
68+
this.heroService.updateHero(this.hero).subscribe();
6969
this.ngOnChanges();
7070
}
7171
// #enddocregion on-submit

public/docs/_examples/reactive-forms/ts/app/hero-list.component.1.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<!-- #docregion -->
22
<nav>
3-
<a *ngFor="let hero of heroes" (click)="select(hero)">{{hero.name}}</a>
3+
<a *ngFor="let hero of heroes | async" (click)="select(hero)">{{hero.name}}</a>
44
</nav>
55

66
<div *ngIf="selectedHero">

public/docs/_examples/reactive-forms/ts/app/hero-list.component.html

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<!-- #docregion -->
2-
<p *ngIf="!heroes"><b><i>Loading heroes ... </i></b></p>
3-
<h3 *ngIf="heroes">Select a hero:</h3>
2+
<h3 *ngIf="isLoading"><i>Loading heroes ... </i></h3>
3+
<h3 *ngIf="!isLoading">Select a hero:</h3>
44

55
<nav>
66
<button (click)="getHeroes()" class="btn btn-primary">Refresh</button>
7-
<a *ngFor="let hero of heroes" (click)="select(hero)">{{hero.name}}</a>
7+
<a *ngFor="let hero of heroes | async" (click)="select(hero)">{{hero.name}}</a>
88
</nav>
99

1010
<div *ngIf="selectedHero">

public/docs/_examples/reactive-forms/ts/app/hero-list.component.ts

+7-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
// #docregion
22
import { Component, OnInit } from '@angular/core';
3+
import { Observable } from 'rxjs/Observable';
4+
import 'rxjs/add/operator/finally';
35

46
import { Hero } from './data-model';
57
import { HeroService } from './hero.service';
@@ -10,18 +12,19 @@ import { HeroService } from './hero.service';
1012
templateUrl: 'hero-list.component.html'
1113
})
1214
export class HeroListComponent implements OnInit {
13-
heroes: Hero[];
15+
heroes: Observable<Hero[]>;
16+
isLoading = false;
1417
selectedHero: Hero;
1518

1619
constructor(private heroService: HeroService) { }
1720

1821
ngOnInit() { this.getHeroes(); }
1922

2023
getHeroes() {
24+
this.isLoading = true;
25+
this.heroes = this.heroService.getHeroes()
26+
.finally(() => this.isLoading = false);
2127
this.selectedHero = undefined;
22-
this.heroes = undefined;
23-
return this.heroService.getHeroes()
24-
.then(heroes => this.heroes = heroes);
2528
}
2629

2730
select(hero: Hero) { this.selectedHero = hero; }
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,25 @@
11
// #docregion
22
import { Injectable } from '@angular/core';
33

4+
import { Observable } from 'rxjs/Observable';
5+
import { of } from 'rxjs/observable/of';
6+
import 'rxjs/add/operator/delay';
7+
48
import { Hero, heroes } from './data-model';
59

610
@Injectable()
711
export class HeroService {
812

9-
getHeroes(): Promise<Hero[]> {
10-
return new Promise<Hero[]>(resolve => {
11-
// simulate server latency with delay
12-
setTimeout(() => resolve(heroes), 500);
13-
});
13+
delayMs = 500;
14+
15+
getHeroes(): Observable<Hero[]> {
16+
return of(heroes).delay(this.delayMs); // simulate latency with delay
1417
}
1518

16-
updateHero(hero: Hero): Promise<Hero> {
17-
// Demo: faking server update; nothing can go wrong ;-)
18-
return new Promise<Hero>(resolve => {
19-
// simulate server latency with delay
20-
const ix = heroes.findIndex(h => h.id === hero.id);
21-
setTimeout(() => {
22-
// Demo: mutate cached hero
23-
Object.assign(heroes[ix], hero);
24-
resolve(hero);
25-
}, 500);
26-
});
19+
// Demo: faking server update; assume nothing can go wrong ;-)
20+
updateHero(hero: Hero): Observable<Hero> {
21+
const oldHero = heroes.find(h => h.id === hero.id);
22+
const newHero = Object.assign(oldHero, hero); // Demo: mutate cached hero
23+
return of(newHero).delay(this.delayMs); // simulate latency with delay
2724
}
2825
}

0 commit comments

Comments
 (0)