11// #docplaster
22// #docregion
3- import 'rxjs/add/observable/of' ;
4- import 'rxjs/add/observable/fromEvent' ;
5- import 'rxjs/add/observable/merge' ;
6- import 'rxjs/add/operator/debounceTime' ;
7- import 'rxjs/add/operator/do' ;
8- import 'rxjs/add/operator/switchMap' ;
3+ // #docregion rxjs-imports-1
94import 'rxjs/add/operator/takeUntil' ;
5+ import 'rxjs/add/observable/merge' ;
6+ import 'rxjs/add/observable/fromEvent' ;
7+ // #enddocregion rxjs-imports-1
8+ // #docregion viewchild-imports
109import { Component , OnInit , OnDestroy , AfterViewInit , ViewChild , ElementRef } from '@angular/core' ;
11- import { FormBuilder , FormGroup , FormControl , Validators } from '@angular/forms' ;
12- import { Observable } from 'rxjs/Observable' ;
13- import { Subject } from 'rxjs/Subject' ;
10+ // #enddocregion viewchild-imports
11+ import { FormBuilder , FormGroup , Validators } from '@angular/forms' ;
1412
15- import { EventAggregatorService } from './event-aggregator.service ' ;
13+ import { Hero } from './hero ' ;
1614import { HeroService } from './hero.service' ;
1715
16+ // #docregion rxjs-imports-2
17+ import { Observable } from 'rxjs/Observable' ;
18+ import { Subject } from 'rxjs/Subject' ;
19+ // #enddocregion rxjs-imports-2
20+
21+ // #docregion viewchild-heroName
1822@Component ( {
1923 moduleId : module . id ,
20- templateUrl : 'add-hero.component.html' ,
24+ templateUrl : './ add-hero.component.html' ,
2125 styles : [ '.error { color: red }' ]
2226} )
2327export class AddHeroComponent implements OnInit , OnDestroy , AfterViewInit {
2428 @ViewChild ( 'heroName' , { read : ElementRef } ) heroName : ElementRef ;
29+ // #enddocregion viewchild-heroName
2530
2631 form : FormGroup ;
2732 showErrors : boolean = false ;
@@ -30,32 +35,22 @@ export class AddHeroComponent implements OnInit, OnDestroy, AfterViewInit {
3035
3136 constructor (
3237 private formBuilder : FormBuilder ,
33- private heroService : HeroService ,
34- private eventService : EventAggregatorService
38+ private heroService : HeroService
3539 ) { }
3640
3741 ngOnInit ( ) {
3842 this . form = this . formBuilder . group ( {
39- name : [ '' , [ Validators . required ] , [ ( control : FormControl ) => {
40- return this . checkHeroName ( control . value ) ;
41- } ] ]
43+ name : [ '' , [ Validators . required ] ]
4244 } ) ;
4345 }
44-
45- checkHeroName ( name : string ) {
46- return Observable . of ( name )
47- . switchMap ( heroName => this . heroService . isNameAvailable ( heroName ) )
48- . map ( available => available ? null : { taken : true } ) ;
49- }
50-
46+ // #docregion value-changes
5147 ngAfterViewInit ( ) {
52- const controlBlur$ = Observable . fromEvent ( this . heroName . nativeElement , 'blur' ) ;
48+ const controlBlur$ : Observable < Event > = Observable . fromEvent ( this . heroName . nativeElement , 'blur' ) ;
5349
5450 Observable . merge (
55- this . form . valueChanges ,
56- controlBlur$
51+ controlBlur$ ,
52+ this . form . get ( 'name' ) . valueChanges
5753 )
58- . debounceTime ( 300 )
5954 . takeUntil ( this . onDestroy$ )
6055 . subscribe ( ( ) => this . checkForm ( ) ) ;
6156 }
@@ -65,19 +60,16 @@ export class AddHeroComponent implements OnInit, OnDestroy, AfterViewInit {
6560 this . showErrors = true ;
6661 }
6762 }
63+ // #enddocregion value-changes
64+
65+ ngOnDestroy ( ) {
66+ this . onDestroy$ . complete ( ) ;
67+ }
6868
69- save ( model : any ) {
69+ save ( model : Hero ) {
7070 this . heroService . addHero ( model . name )
7171 . subscribe ( ( ) => {
7272 this . success = true ;
73- this . eventService . add ( {
74- type : 'hero' ,
75- message : 'Hero Added'
76- } ) ;
7773 } ) ;
7874 }
79-
80- ngOnDestroy ( ) {
81- this . onDestroy$ . complete ( ) ;
82- }
8375}
0 commit comments