1
1
// #docplaster
2
2
// #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
9
4
import '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
10
9
import { 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' ;
14
12
15
- import { EventAggregatorService } from './event-aggregator.service ' ;
13
+ import { Hero } from './hero ' ;
16
14
import { HeroService } from './hero.service' ;
17
15
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
18
22
@Component ( {
19
23
moduleId : module . id ,
20
- templateUrl : 'add-hero.component.html' ,
24
+ templateUrl : './ add-hero.component.html' ,
21
25
styles : [ '.error { color: red }' ]
22
26
} )
23
27
export class AddHeroComponent implements OnInit , OnDestroy , AfterViewInit {
24
28
@ViewChild ( 'heroName' , { read : ElementRef } ) heroName : ElementRef ;
29
+ // #enddocregion viewchild-heroName
25
30
26
31
form : FormGroup ;
27
32
showErrors : boolean = false ;
@@ -30,32 +35,22 @@ export class AddHeroComponent implements OnInit, OnDestroy, AfterViewInit {
30
35
31
36
constructor (
32
37
private formBuilder : FormBuilder ,
33
- private heroService : HeroService ,
34
- private eventService : EventAggregatorService
38
+ private heroService : HeroService
35
39
) { }
36
40
37
41
ngOnInit ( ) {
38
42
this . form = this . formBuilder . group ( {
39
- name : [ '' , [ Validators . required ] , [ ( control : FormControl ) => {
40
- return this . checkHeroName ( control . value ) ;
41
- } ] ]
43
+ name : [ '' , [ Validators . required ] ]
42
44
} ) ;
43
45
}
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
51
47
ngAfterViewInit ( ) {
52
- const controlBlur$ = Observable . fromEvent ( this . heroName . nativeElement , 'blur' ) ;
48
+ const controlBlur$ : Observable < Event > = Observable . fromEvent ( this . heroName . nativeElement , 'blur' ) ;
53
49
54
50
Observable . merge (
55
- this . form . valueChanges ,
56
- controlBlur$
51
+ controlBlur$ ,
52
+ this . form . get ( 'name' ) . valueChanges
57
53
)
58
- . debounceTime ( 300 )
59
54
. takeUntil ( this . onDestroy$ )
60
55
. subscribe ( ( ) => this . checkForm ( ) ) ;
61
56
}
@@ -65,19 +60,16 @@ export class AddHeroComponent implements OnInit, OnDestroy, AfterViewInit {
65
60
this . showErrors = true ;
66
61
}
67
62
}
63
+ // #enddocregion value-changes
64
+
65
+ ngOnDestroy ( ) {
66
+ this . onDestroy$ . complete ( ) ;
67
+ }
68
68
69
- save ( model : any ) {
69
+ save ( model : Hero ) {
70
70
this . heroService . addHero ( model . name )
71
71
. subscribe ( ( ) => {
72
72
this . success = true ;
73
- this . eventService . add ( {
74
- type : 'hero' ,
75
- message : 'Hero Added'
76
- } ) ;
77
73
} ) ;
78
74
}
79
-
80
- ngOnDestroy ( ) {
81
- this . onDestroy$ . complete ( ) ;
82
- }
83
75
}
0 commit comments