| 
									
										
										
										
											2015-11-21 11:23:40 -08:00
										 |  |  | import { | 
					
						
							|  |  |  |   AfterContentChecked, | 
					
						
							| 
									
										
										
										
											2016-05-03 14:06:32 +02:00
										 |  |  |   AfterContentInit, | 
					
						
							| 
									
										
										
										
											2015-11-21 11:23:40 -08:00
										 |  |  |   AfterViewChecked, | 
					
						
							| 
									
										
										
										
											2016-05-03 14:06:32 +02:00
										 |  |  |   AfterViewInit, | 
					
						
							|  |  |  |   DoCheck, | 
					
						
							|  |  |  |   OnChanges, | 
					
						
							|  |  |  |   OnDestroy, | 
					
						
							|  |  |  |   OnInit, | 
					
						
							|  |  |  |   SimpleChange | 
					
						
							| 
									
										
										
										
											2016-04-27 11:28:22 -07:00
										 |  |  | } from '@angular/core'; | 
					
						
							| 
									
										
										
										
											2016-06-08 01:06:25 +02:00
										 |  |  | import { Component, Input } from '@angular/core'; | 
					
						
							|  |  |  | import { LoggerService }    from './logger.service'; | 
					
						
							| 
									
										
										
										
											2015-11-21 11:23:40 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | let nextId = 1; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-23 18:21:09 +00:00
										 |  |  | // #docregion ngOnInit
 | 
					
						
							|  |  |  | export class PeekABoo implements OnInit { | 
					
						
							| 
									
										
										
										
											2016-05-03 14:06:32 +02:00
										 |  |  |   constructor(private logger: LoggerService) { } | 
					
						
							| 
									
										
										
										
											2016-01-23 18:21:09 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   // implement OnInit's `ngOnInit` method
 | 
					
						
							| 
									
										
										
										
											2016-05-03 14:06:32 +02:00
										 |  |  |   ngOnInit() { this.logIt(`OnInit`); } | 
					
						
							| 
									
										
										
										
											2016-01-23 18:21:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 14:06:32 +02:00
										 |  |  |   protected logIt(msg: string) { | 
					
						
							|  |  |  |     this.logger.log(`#${nextId++} ${msg}`); | 
					
						
							| 
									
										
										
										
											2016-01-23 18:21:09 +00:00
										 |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | // #enddocregion ngOnInit
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-21 11:23:40 -08:00
										 |  |  | @Component({ | 
					
						
							|  |  |  |   selector: 'peek-a-boo', | 
					
						
							|  |  |  |   template: '<p>Now you see my hero, {{name}}</p>', | 
					
						
							|  |  |  |   styles: ['p {background: LightYellow; padding: 8px}'] | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | // Don't HAVE to mention the Lifecycle Hook interfaces
 | 
					
						
							|  |  |  | // unless we want typing and tool support.
 | 
					
						
							| 
									
										
										
										
											2016-01-23 18:21:09 +00:00
										 |  |  | export class PeekABooComponent extends PeekABoo implements | 
					
						
							|  |  |  |              OnChanges, OnInit, DoCheck, | 
					
						
							| 
									
										
										
										
											2016-04-27 11:28:22 -07:00
										 |  |  |              AfterContentInit, AfterContentChecked, | 
					
						
							| 
									
										
										
										
											2016-01-23 18:21:09 +00:00
										 |  |  |              AfterViewInit, AfterViewChecked, | 
					
						
							|  |  |  |              OnDestroy { | 
					
						
							| 
									
										
										
										
											2016-04-27 11:28:22 -07:00
										 |  |  |   @Input()  name: string; | 
					
						
							| 
									
										
										
										
											2015-11-21 11:23:40 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 14:06:32 +02:00
										 |  |  |   private verb = 'initialized'; | 
					
						
							| 
									
										
										
										
											2015-11-21 11:23:40 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-27 11:28:22 -07:00
										 |  |  |   constructor(logger: LoggerService) { | 
					
						
							| 
									
										
										
										
											2016-01-23 18:21:09 +00:00
										 |  |  |     super(logger); | 
					
						
							| 
									
										
										
										
											2016-04-27 11:28:22 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-23 18:21:09 +00:00
										 |  |  |     let is = this.name ? 'is' : 'is not'; | 
					
						
							| 
									
										
										
										
											2016-05-03 14:06:32 +02:00
										 |  |  |     this.logIt(`name ${is} known at construction`); | 
					
						
							| 
									
										
										
										
											2015-11-21 11:23:40 -08:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-23 18:21:09 +00:00
										 |  |  |   // only called for/if there is an @input variable set by parent.
 | 
					
						
							| 
									
										
										
										
											2016-04-27 11:28:22 -07:00
										 |  |  |   ngOnChanges(changes: {[propertyName: string]: SimpleChange}) { | 
					
						
							|  |  |  |     let changesMsgs: string[] = []; | 
					
						
							| 
									
										
										
										
											2015-11-21 11:23:40 -08:00
										 |  |  |     for (let propName in changes) { | 
					
						
							|  |  |  |       if (propName === 'name') { | 
					
						
							|  |  |  |         let name = changes['name'].currentValue; | 
					
						
							| 
									
										
										
										
											2016-05-03 14:06:32 +02:00
										 |  |  |         changesMsgs.push(`name ${this.verb} to "${name}"`); | 
					
						
							| 
									
										
										
										
											2015-11-21 11:23:40 -08:00
										 |  |  |       } else { | 
					
						
							| 
									
										
										
										
											2016-05-03 14:06:32 +02:00
										 |  |  |         changesMsgs.push(propName + ' ' + this.verb); | 
					
						
							| 
									
										
										
										
											2015-11-21 11:23:40 -08:00
										 |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2016-05-03 14:06:32 +02:00
										 |  |  |     this.logIt(`OnChanges: ${changesMsgs.join('; ')}`); | 
					
						
							|  |  |  |     this.verb = 'changed'; // next time it will be a change
 | 
					
						
							| 
									
										
										
										
											2015-11-21 11:23:40 -08:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Beware! Called frequently!
 | 
					
						
							| 
									
										
										
										
											2016-01-23 18:21:09 +00:00
										 |  |  |   // Called in every change detection cycle anywhere on the page
 | 
					
						
							| 
									
										
										
										
											2016-05-03 14:06:32 +02:00
										 |  |  |   ngDoCheck() { this.logIt(`DoCheck`); } | 
					
						
							| 
									
										
										
										
											2015-11-21 11:23:40 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 14:06:32 +02:00
										 |  |  |   ngAfterContentInit() { this.logIt(`AfterContentInit`);  } | 
					
						
							| 
									
										
										
										
											2015-11-21 11:23:40 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   // Beware! Called frequently!
 | 
					
						
							| 
									
										
										
										
											2016-01-23 18:21:09 +00:00
										 |  |  |   // Called in every change detection cycle anywhere on the page
 | 
					
						
							| 
									
										
										
										
											2016-05-03 14:06:32 +02:00
										 |  |  |   ngAfterContentChecked() { this.logIt(`AfterContentChecked`); } | 
					
						
							| 
									
										
										
										
											2015-11-21 11:23:40 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 14:06:32 +02:00
										 |  |  |   ngAfterViewInit() { this.logIt(`AfterViewInit`); } | 
					
						
							| 
									
										
										
										
											2015-11-21 11:23:40 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-23 18:21:09 +00:00
										 |  |  |   // Beware! Called frequently!
 | 
					
						
							|  |  |  |   // Called in every change detection cycle anywhere on the page
 | 
					
						
							| 
									
										
										
										
											2016-05-03 14:06:32 +02:00
										 |  |  |   ngAfterViewChecked() { this.logIt(`AfterViewChecked`); } | 
					
						
							| 
									
										
										
										
											2015-11-21 11:23:40 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 14:06:32 +02:00
										 |  |  |   ngOnDestroy() { this.logIt(`OnDestroy`); } | 
					
						
							| 
									
										
										
										
											2016-01-23 18:21:09 +00:00
										 |  |  | } |