91 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			91 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|  | include ../../../../_includes/_util-fns | ||
|  | 
 | ||
|  | :marked | ||
|  |   # Component Lifecycle | ||
|  |   A Component has a lifecycle managed by Angular itself. Angular creates it, renders it, creates and renders its children, | ||
|  |   checks it when its data-bound properties change, and destroys it before removing it from the DOM. | ||
|  |    | ||
|  |   Angular offers **Lifecycle hooks** | ||
|  |   that give us visibility into these key moments and the ability to act when they occur. | ||
|  |    | ||
|  |   We cover these hooks in this chapter and demonstrate how they work in code. | ||
|  |    | ||
|  |   [Live Example](/resources/live-examples/lifecycle-hooks/ts/plnkr.html) | ||
|  |    | ||
|  |   <!-- | ||
|  |     https://github.com/angular/angular/blob/master/modules/angular2/src/core/linker/interfaces.ts | ||
|  |   --> | ||
|  | 
 | ||
|  | .l-main-section | ||
|  | :marked | ||
|  |   ## The Lifecycle Hooks | ||
|  |   Directive and component instances have a lifecycle | ||
|  |   as Angular creates, updates, and destroys them. | ||
|  |    | ||
|  |   Developers can tap into key moments in that lifecycle by implementing | ||
|  |   one or more of the "Lifecycle Hook" interfaces, all of them available | ||
|  |   in the `angular2/core` library.  | ||
|  |    | ||
|  |   Here is the complete lifecycle hook interface inventory: | ||
|  | 
 | ||
|  |    * `OnInit` | ||
|  |    * `OnDestroy` | ||
|  |    * `DoCheck` | ||
|  |    * `OnChanges` | ||
|  |    * `AfterContentInit` | ||
|  |    * `AfterContentChecked` | ||
|  |    * `AfterViewInit` | ||
|  |    * `AfterViewChecked` | ||
|  | 
 | ||
|  |   No directive or component will implement all of them and some of them only make | ||
|  |   sense for components. | ||
|  |    | ||
|  |   Each interface has a single hook method whose name is the interface name prefixed with `ng`. | ||
|  |   For example, the `OnInit` interface has a hook method names `ngOnInit`. | ||
|  |    | ||
|  |   Angular calls these hook methods in the following order: | ||
|  |   * `ngOnChanges` - called when an input or output binding value changes | ||
|  |   * `ngOnInit` - after the first `ngOnChanges` | ||
|  |   * `ngDoCheck` - developer's custom change detection | ||
|  |   * `ngAfterContentInit` - after component content initialized | ||
|  |   * `ngAfterContentChecked` - after every check of component content | ||
|  |   * `ngAfterViewInit` - after component's view(s) are initialized | ||
|  |   * `ngAfterViewChecked` - after every check of a component's view(s) | ||
|  |   * `ngOnDestroy` - just before the directive is destroyed. | ||
|  |   | ||
|  |   The [live example](/resources/live-examples/lifecycle-hooks/ts/plnkr.html) demonstrates | ||
|  |   these hooks. | ||
|  | 
 | ||
|  | :marked | ||
|  |   ## Peek-a-boo | ||
|  |   The `PeekABooComponent` demonstrates all of the hooks in the same component. | ||
|  | .l-sub-section | ||
|  |   :marked | ||
|  |     Except for `DoCheck`. If our component superseded regular Angular change detection | ||
|  |     with its own change detection processing | ||
|  |     we would also add a `ngDoCheck` method. We would **not** implement `ngOnChanges`. | ||
|  |     We write either `ngOnChanges` or `ngDoCheck`, not both. | ||
|  |      | ||
|  |     Custom change detection and `ngDoCheck` are on our documentation backlog.  | ||
|  | :marked | ||
|  |   Peek-a-boo is a demo. We'd rarely if ever implement all interfaces like this in real life. | ||
|  | 
 | ||
|  |   We look forward to explaining the Peek-a-boo example and the other lifecycle hook examples in | ||
|  |   an update to this chapter. Meanwhile, please enjoy poking around in the  | ||
|  |   [code](/resources/live-examples/lifecycle-hooks/ts/plnkr.html). | ||
|  |    | ||
|  |   ## Interface optional? | ||
|  |   The lifecycle interfaces are optional. | ||
|  |   We recommend adding them to benefit from TypeScript's strong typing and editor tooling.  | ||
|  |    | ||
|  |   But they disappear from the transpiled JavaScript.  | ||
|  |   Angular can't see them at runtime.  And they are useless to someone developing in | ||
|  |   a language without interfaces (such as pure JavaScript). | ||
|  |    | ||
|  |   Fortunately, they aren't necessary.  | ||
|  |   We don't have to add the lifecycle hook interfaces to our directives and components to benefit from the hooks themselves. | ||
|  |    | ||
|  |   Angular instead inspects our directive and component classes | ||
|  |   and calls the hook methods *if they are defined*. | ||
|  |   Angular will find and call methods like `ngOnInit()`, with or without the interfaces.   |