From b2e1e081b1201302bd2942ca7ab89b8da115b557 Mon Sep 17 00:00:00 2001 From: Minh Van Date: Wed, 14 Sep 2016 23:52:06 +0700 Subject: [PATCH 1/9] Init "Component Lifecycle" article --- .../_article-1473861890.component.js | 49 +++++++ .../article-1473861890.component.js | 49 +++++++ ...article-1473861890.component.prebuild.json | 4 + .../1473861890/code-blocks/code-block.html | 21 +++ cms/articles/1473861890/index.js | 14 ++ .../1473861890/styles/_variables.scss | 11 ++ .../1473861890/styles/article-1473861890.scss | 20 +++ .../templates/article-1473861890.html | 135 ++++++++++++++++++ 8 files changed, 303 insertions(+) create mode 100644 cms/articles/1473861890/_article-1473861890.component.js create mode 100644 cms/articles/1473861890/article-1473861890.component.js create mode 100644 cms/articles/1473861890/article-1473861890.component.prebuild.json create mode 100644 cms/articles/1473861890/code-blocks/code-block.html create mode 100644 cms/articles/1473861890/index.js create mode 100644 cms/articles/1473861890/styles/_variables.scss create mode 100644 cms/articles/1473861890/styles/article-1473861890.scss create mode 100644 cms/articles/1473861890/templates/article-1473861890.html diff --git a/cms/articles/1473861890/_article-1473861890.component.js b/cms/articles/1473861890/_article-1473861890.component.js new file mode 100644 index 0000000..ecce2e0 --- /dev/null +++ b/cms/articles/1473861890/_article-1473861890.component.js @@ -0,0 +1,49 @@ +import * as ngCore from '@angular/core'; +import { DomSanitizationService } from '@angular/platform-browser'; +import highlight from 'highlight.js'; + +import { NGX_GRID_DIRECTIVES } from 'ngx-bootstrap/components'; + +import { + CODE_PANEL_DIRECTIVES, + HIGHLIGHT_DIRECTIVES +} from 'xblog-cores/components'; +import { cmsArticleService } from '../../cores/services'; + +function _article1473861890Component(){ + this.constructor = [ + DomSanitizationService, + cmsArticleService, + + function article1473861890Component(sanitizer, articleService){ + this.id = 1473861890; + this.sanitizer = sanitizer; + this.articleService = articleService; + + this.myAppLink = '#'; + + this.codeBlock = this.getCodeBlock('code-block.html'); + } + ]; + + this.getCodeBlock = function(fileName) { + var _codeBlock = this.articleService.getCodeBlock(this.id, fileName); + _codeBlock = highlight.highlightAuto(_codeBlock, ['javascript']).value; + return this.sanitizer.bypassSecurityTrustHtml(_codeBlock); + }; +} + +export var article1473861890Component = ngCore.Component({ + selector: 'article', + templateUrl: './templates/article-1473861890.html', + styleUrls: ['./styles/article-1473861890.scss'], + directives: [ + NGX_GRID_DIRECTIVES, + CODE_PANEL_DIRECTIVES, + HIGHLIGHT_DIRECTIVES + ], + host: { + '[class.xblog-article-1473861890]': 'true' + } +}) +.Class(new _article1473861890Component()); diff --git a/cms/articles/1473861890/article-1473861890.component.js b/cms/articles/1473861890/article-1473861890.component.js new file mode 100644 index 0000000..942e739 --- /dev/null +++ b/cms/articles/1473861890/article-1473861890.component.js @@ -0,0 +1,49 @@ +import * as ngCore from '@angular/core'; +import { DomSanitizationService } from '@angular/platform-browser'; +import highlight from 'highlight.js'; + +import { NGX_GRID_DIRECTIVES } from 'ngx-bootstrap/components'; + +import { + CODE_PANEL_DIRECTIVES, + HIGHLIGHT_DIRECTIVES +} from 'xblog-cores/components'; +import { cmsArticleService } from '../../cores/services'; + +function _article1473861890Component(){ + this.constructor = [ + DomSanitizationService, + cmsArticleService, + + function article1473861890Component(sanitizer, articleService){ + this.id = 1473861890; + this.sanitizer = sanitizer; + this.articleService = articleService; + + this.myAppLink = '#'; + + this.codeBlock = this.getCodeBlock('code-block.html'); + } + ]; + + this.getCodeBlock = function(fileName) { + var _codeBlock = this.articleService.getCodeBlock(this.id, fileName); + _codeBlock = highlight.highlightAuto(_codeBlock, ['javascript']).value; + return this.sanitizer.bypassSecurityTrustHtml(_codeBlock); + }; +} + +export var article1473861890Component = ngCore.Component({ + selector: 'article', + template: "

In previous articles, you've alreadry gotten knowledges about directives/components.

Go on with a subject relate to them, I'll show you their lifecycle.


A component has a lifecycle managed by Angular itself.

Angular offers component lifecycle hooks that give us the ability to act when they occur.

No directive or component will implement all of them and some of the hooks only make sense for components.


After component's constructor is called to create an instance, Angular calls its lifecycle hook methods in following sequence.

Angular only calls a hook method if it is defined.


ngOnChangesBefore ngOnInit and when a data-bound input property value changes.ngOnInitAfter the first ngOnChanges.ngDoCheckDuring every Angular change detection cycle.ngAfterContentInitAfter projecting content into the component.ngAfterContentCheckedAfter every check of projected component content.ngAfterViewInitAfter initializing the component's views and child views.ngAfterViewCheckedAfter every check of the component's views and child views.ngOnDestroyJust before Angular destroys the directive/component.

We'll detail each lifecycle hook and find out how we should work with them


ngOnChanges

This hook method executes before ngOnInit and when a data-bound input property value changes.

The method receives a object of current and previous values, I call it is changeRecord


For example, I have a component as below


my-app.component.jsFull Code

There're 2 binding, type is a primitive value, model is an object

If I change value of type, ngOnChanges will be fired and we'll receive a changeRecord only contains current and previous values of type.

At this point, we have a chance to do something which relate to changed type such as set or remove a class from our component by using Renderer


Notice that, the value of model property is the reference to the object. Angular doesn't care if any its property's value changed.

It means that the model object reference didn't change so Angular doesn't fire ngOnChanges


ngOnInit

This hook method executes after the first ngOnChanges

We turn to ngOnInit for 2 reasons

- To perform complex initializations shortly after construction

- To set up the component after Angular sets the input properties


Why shouldn't we fetch data from server in the constructor ? Because data-bound input properties only are set after construction.

If you fetch data with params which base on values of input properties, make sure you will get errors.

The constructor should do no more than set the initial local variables to simple values.


ngDoCheck

It is called with enormous frequency, Angular fires it after every change detection cycle no matter where the change occurred

Look at below sample, when you type something into textbox ngDoCheck will be called. Even, you just foucus on textbox, it's also called.


Clearly, if you decide to implement your logic in there, make sure implementation must be very lightweight or the user experience may suffer


ngAfterContent

The ngAfterContentInit and ngAfterContentChecked hooks that Angular calls after Angular projects external content into the component.

Angular calls both ngAfterContent hooks before calling either of the ngAfterView hooks.


The hooks take action based on changing values in a content child which we can only reach by querying for it via ContentChild

The ngAfterContent hooks concern ContentChildren, the child components that Angular projected into the component


Using ng-content is a way to import Html from outside the component and insert content into component's template in a designated spot


Notice that, Angular completes composition of the projected content before finishing the composition of this component's view.

We still have a window of opportunity to modify that view.


ngAfterView

The ngAfterViewInit and ngAfterViewChecked execute after initializing the component's views and child views


The hooks take action based on changing values within the child view which we can only reach by querying for the child view via ViewChild

The AfterView hooks concern ViewChildren, the child components whose element tags appear within the component's template.


Do you see I used setTimeout() in sample ?

If you try to update component's data-bound property immediately instead of using setTimeout, Angular throws an error.


Notice that we must adhere to Angular's unidirectional data flow rule which says that we may not update the view after it has been composed.

Both hooks fire after the component's view has been composed.


For ngAfterViewChecked, Angular frequently calls it, even when there are no changes of interest. Write lean hook methods to avoid performance problems


ngOnDestroy

This hook run just before Angular destroys the directive/component.

This is the place to free resources that won't be garbage collected automatically

Such as Unsubscribe from observables and DOM events. Stop interval timers etc

", + styles: [":host(.xblog-article-1473861890)>ngx-grid{font-size:.75rem;padding:1rem;background-color:#fff;box-shadow:0 1px 4px 0 rgba(0,0,0,0.14)}:host(.xblog-article-1473861890)>ngx-grid>ngx-grid-row:not(:last-child){border-bottom:1px solid #eceeef}:host(.xblog-article-1473861890)>ngx-grid>ngx-grid-row>ngx-grid-col{padding:1rem}"], + directives: [ + NGX_GRID_DIRECTIVES, + CODE_PANEL_DIRECTIVES, + HIGHLIGHT_DIRECTIVES + ], + host: { + '[class.xblog-article-1473861890]': 'true' + } +}) +.Class(new _article1473861890Component()); diff --git a/cms/articles/1473861890/article-1473861890.component.prebuild.json b/cms/articles/1473861890/article-1473861890.component.prebuild.json new file mode 100644 index 0000000..84e75cb --- /dev/null +++ b/cms/articles/1473861890/article-1473861890.component.prebuild.json @@ -0,0 +1,4 @@ +{ + "origin": "./cms/articles/1473861890/_article-1473861890.component.js", + "inline": "./cms/articles/1473861890/article-1473861890.component.js" +} \ No newline at end of file diff --git a/cms/articles/1473861890/code-blocks/code-block.html b/cms/articles/1473861890/code-blocks/code-block.html new file mode 100644 index 0000000..6a74a67 --- /dev/null +++ b/cms/articles/1473861890/code-blocks/code-block.html @@ -0,0 +1,21 @@ +import * as ngCore from '@angular/core'; + +import { NGX_CARD_DIRECTIVES } from 'ngx-bootstrap/components'; + +function _codePanelComponent(){ + this.constructor = function codePanelComponent(){}; +} + +export var codePanelComponent = ngCore.Component({ + selector: 'xblog-code-panel', + templateUrl: './templates/code-panel.html', + styleUrls: ['./styles/code-panel.scss'], + directives: [ + NGX_CARD_DIRECTIVES + ], + properties: [ 'lang' ], + host: { + '[class.xblog-code-panel]': 'true' + } +}) +.Class(new _codePanelComponent()); \ No newline at end of file diff --git a/cms/articles/1473861890/index.js b/cms/articles/1473861890/index.js new file mode 100644 index 0000000..8ebb084 --- /dev/null +++ b/cms/articles/1473861890/index.js @@ -0,0 +1,14 @@ +import { article1473861890Component } from './article-1473861890.component' + +export var article1473861890 = { + id: 1473861890, + title: 'Component Lifecycle', + postedDate: 'Wed Sep 14 2016 21:04:49 GMT+0700 (SE Asia Standard Time)', + author: 'Minh Van', + cover: 'blog/resources/images/xblog-home-cover.jpg', + routeLink: '/blog/articles/component-lifecycle-1473861890.html', + relatedArticles: [], + tags: [], + description: 'A component has a lifecycle managed by Angular itself. Angular offers component lifecycle hooks that give us the ability to act when they occur.', + content: article1473861890Component, +}; diff --git a/cms/articles/1473861890/styles/_variables.scss b/cms/articles/1473861890/styles/_variables.scss new file mode 100644 index 0000000..75e4c83 --- /dev/null +++ b/cms/articles/1473861890/styles/_variables.scss @@ -0,0 +1,11 @@ +@import 'palette.scss'; +@import 'typography.scss'; + +$xblog-article-1473861890-grid-font-size: xblog-font-size(xs); +$xblog-article-1473861890-grid-padding: 1rem; +$xblog-article-1473861890-grid-background-color: xblog-color($xblog-color-white, light); +$xblog-article-1473861890-grid-box-shadow: 0 1px 4px 0 rgba(0,0,0,0.14); + +$xblog-article-1473861890-grid-row-border-bottom: 1px solid xblog-color($xblog-color-gray, light-1); + +$xblog-article-1473861890-grid-col-padding: 1rem; \ No newline at end of file diff --git a/cms/articles/1473861890/styles/article-1473861890.scss b/cms/articles/1473861890/styles/article-1473861890.scss new file mode 100644 index 0000000..1b17eb7 --- /dev/null +++ b/cms/articles/1473861890/styles/article-1473861890.scss @@ -0,0 +1,20 @@ +@import './_variables.scss'; + +:host(.xblog-article-1473861890){ + > ngx-grid { + font-size: $xblog-article-1473861890-grid-font-size; + padding: $xblog-article-1473861890-grid-padding; + background-color: $xblog-article-1473861890-grid-background-color; + box-shadow: $xblog-article-1473861890-grid-box-shadow; + + > ngx-grid-row { + &:not(:last-child) { + border-bottom: $xblog-article-1473861890-grid-row-border-bottom; + } + + > ngx-grid-col { + padding: $xblog-article-1473861890-grid-col-padding; + } + } + } +} \ No newline at end of file diff --git a/cms/articles/1473861890/templates/article-1473861890.html b/cms/articles/1473861890/templates/article-1473861890.html new file mode 100644 index 0000000..0c3e620 --- /dev/null +++ b/cms/articles/1473861890/templates/article-1473861890.html @@ -0,0 +1,135 @@ +

In previous articles, you've alreadry gotten knowledges about directives/components.

+

Go on with a subject relate to them, I'll show you their lifecycle.

+
+

A component has a lifecycle managed by Angular itself.

+

Angular offers component lifecycle hooks that give us the ability to act when they occur.

+

No directive or component will implement all of them and some of the hooks only make sense for components.

+
+

After component's constructor is called to create an instance, Angular calls its lifecycle hook methods in following sequence.

+

Angular only calls a hook method if it is defined.

+
+ + + ngOnChanges + + Before ngOnInit and when a data-bound input property value changes. + + + + + ngOnInit + + After the first ngOnChanges. + + + + + ngDoCheck + + During every Angular change detection cycle. + + + + + ngAfterContentInit + + After projecting content into the component. + + + + + ngAfterContentChecked + + After every check of projected component content. + + + + + ngAfterViewInit + + After initializing the component's views and child views. + + + + + ngAfterViewChecked + + After every check of the component's views and child views. + + + + + ngOnDestroy + + Just before Angular destroys the directive/component. + + + +
+

We'll detail each lifecycle hook and find out how we should work with them

+
+

ngOnChanges

+

This hook method executes before ngOnInit and when a data-bound input property value changes.

+

The method receives a object of current and previous values, I call it is changeRecord

+
+

For example, I have a component as below

+
+ + my-app.component.js + Full Code + + +
+

There're 2 binding, type is a primitive value, model is an object

+

If I change value of type, ngOnChanges will be fired and we'll receive a changeRecord only contains current and previous values of type.

+

At this point, we have a chance to do something which relate to changed type such as set or remove a class from our component by using Renderer

+
+

Notice that, the value of model property is the reference to the object. Angular doesn't care if any its property's value changed.

+

It means that the model object reference didn't change so Angular doesn't fire ngOnChanges

+
+

ngOnInit

+

This hook method executes after the first ngOnChanges

+

We turn to ngOnInit for 2 reasons

+

- To perform complex initializations shortly after construction

+

- To set up the component after Angular sets the input properties

+
+

Why shouldn't we fetch data from server in the constructor ? Because data-bound input properties only are set after construction.

+

If you fetch data with params which base on values of input properties, make sure you will get errors.

+

The constructor should do no more than set the initial local variables to simple values.

+
+

ngDoCheck

+

It is called with enormous frequency, Angular fires it after every change detection cycle no matter where the change occurred

+

Look at below sample, when you type something into textbox ngDoCheck will be called. Even, you just foucus on textbox, it's also called.

+
+

Clearly, if you decide to implement your logic in there, make sure implementation must be very lightweight or the user experience may suffer

+
+

ngAfterContent

+

The ngAfterContentInit and ngAfterContentChecked hooks that Angular calls after Angular projects external content into the component.

+

Angular calls both ngAfterContent hooks before calling either of the ngAfterView hooks.

+
+

The hooks take action based on changing values in a content child which we can only reach by querying for it via ContentChild

+

The ngAfterContent hooks concern ContentChildren, the child components that Angular projected into the component

+
+

Using ng-content is a way to import Html from outside the component and insert content into component's template in a designated spot

+
+

Notice that, Angular completes composition of the projected content before finishing the composition of this component's view.

+

We still have a window of opportunity to modify that view.

+
+

ngAfterView

+

The ngAfterViewInit and ngAfterViewChecked execute after initializing the component's views and child views

+
+

The hooks take action based on changing values within the child view which we can only reach by querying for the child view via ViewChild

+

The AfterView hooks concern ViewChildren, the child components whose element tags appear within the component's template.

+
+

Do you see I used setTimeout() in sample ?

+

If you try to update component's data-bound property immediately instead of using setTimeout, Angular throws an error.

+
+

Notice that we must adhere to Angular's unidirectional data flow rule which says that we may not update the view after it has been composed.

+

Both hooks fire after the component's view has been composed.

+
+

For ngAfterViewChecked, Angular frequently calls it, even when there are no changes of interest. Write lean hook methods to avoid performance problems

+
+

ngOnDestroy

+

This hook run just before Angular destroys the directive/component.

+

This is the place to free resources that won't be garbage collected automatically

+

Such as Unsubscribe from observables and DOM events. Stop interval timers etc

\ No newline at end of file From 0496309f53ea95360f858bb2c101249cdebc6c39 Mon Sep 17 00:00:00 2001 From: Minh Van Date: Wed, 14 Sep 2016 23:59:08 +0700 Subject: [PATCH 2/9] Added declaration to index.js for "Component Lifecycle" article --- cms/articles/index.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cms/articles/index.js b/cms/articles/index.js index ce4eebe..8236a53 100644 --- a/cms/articles/index.js +++ b/cms/articles/index.js @@ -1,4 +1,8 @@ -let _ARTICLES = []; +import { article1473861890 } from './1473861890'; + +let _ARTICLES = [ + article1473861890, +]; export var ARTICLE_STORE = _init(); From 433e39cce00ab2bef3baf40c269a5181f1aad0b4 Mon Sep 17 00:00:00 2001 From: Minh Van Date: Sat, 17 Sep 2016 15:46:16 +0700 Subject: [PATCH 3/9] Updated cms article 1473861890 --- .../_article-1473861890.component.js | 81 +++++++++++++++- .../article-1473861890.component.js | 83 +++++++++++++++- .../1473861890/code-blocks/code-block.html | 21 ---- .../code-blocks/ng-after-content-1.html | 30 ++++++ .../code-blocks/ng-after-content-2.html | 33 +++++++ .../1473861890/code-blocks/ng-after-view.html | 47 +++++++++ .../1473861890/code-blocks/ng-do-check.html | 41 ++++++++ .../1473861890/code-blocks/ng-on-changes.html | 23 +++++ .../1473861890/code-blocks/ng-on-init.html | 23 +++++ cms/articles/1473861890/index.js | 7 +- .../ngAfterContent-example-1473861890.png | Bin 0 -> 87587 bytes .../images/ngAfterView-example-1473861890.png | Bin 0 -> 68080 bytes .../images/ngDoCheck-example-1473861890.png | Bin 0 -> 71973 bytes .../images/ngOnChanges-example-1473861890.png | Bin 0 -> 78943 bytes .../images/ngOnInit-example-1473861890.png | Bin 0 -> 33746 bytes .../templates/article-1473861890.html | 90 +++++++++++++++--- 16 files changed, 435 insertions(+), 44 deletions(-) delete mode 100644 cms/articles/1473861890/code-blocks/code-block.html create mode 100644 cms/articles/1473861890/code-blocks/ng-after-content-1.html create mode 100644 cms/articles/1473861890/code-blocks/ng-after-content-2.html create mode 100644 cms/articles/1473861890/code-blocks/ng-after-view.html create mode 100644 cms/articles/1473861890/code-blocks/ng-do-check.html create mode 100644 cms/articles/1473861890/code-blocks/ng-on-changes.html create mode 100644 cms/articles/1473861890/code-blocks/ng-on-init.html create mode 100644 cms/articles/1473861890/resources/images/ngAfterContent-example-1473861890.png create mode 100644 cms/articles/1473861890/resources/images/ngAfterView-example-1473861890.png create mode 100644 cms/articles/1473861890/resources/images/ngDoCheck-example-1473861890.png create mode 100644 cms/articles/1473861890/resources/images/ngOnChanges-example-1473861890.png create mode 100644 cms/articles/1473861890/resources/images/ngOnInit-example-1473861890.png diff --git a/cms/articles/1473861890/_article-1473861890.component.js b/cms/articles/1473861890/_article-1473861890.component.js index ecce2e0..fc44207 100644 --- a/cms/articles/1473861890/_article-1473861890.component.js +++ b/cms/articles/1473861890/_article-1473861890.component.js @@ -8,6 +8,7 @@ import { CODE_PANEL_DIRECTIVES, HIGHLIGHT_DIRECTIVES } from 'xblog-cores/components'; +import { resourceUtils } from 'xblog-cores/utils'; import { cmsArticleService } from '../../cores/services'; function _article1473861890Component(){ @@ -20,9 +21,85 @@ function _article1473861890Component(){ this.sanitizer = sanitizer; this.articleService = articleService; - this.myAppLink = '#'; + this.ngOnChanges = { + sourceCode: { + exampleComponent: { + name: 'example.component.js', + link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-on-changes/example.component.js') + } + }, + screenCaptures: { + 1: resourceUtils.getImg('ngOnChanges-example-1473861890.png') + }, + codeBlocks: { + 1: this.getCodeBlock('ng-on-changes.html') + } + }; - this.codeBlock = this.getCodeBlock('code-block.html'); + this.ngOnInit = { + sourceCode: { + childComponent: { + name: 'child.component.js', + link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-on-init/child.component.js') + } + }, + screenCaptures: { + 1: resourceUtils.getImg('ngOnInit-example-1473861890.png') + }, + codeBlocks: { + 1: this.getCodeBlock('ng-on-init.html') + } + }; + + this.ngDoCheck = { + sourceCode: { + childComponent: { + name: 'child.component.js', + link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-do-check/child.component.js') + } + }, + screenCaptures: { + 1: resourceUtils.getImg('ngDoCheck-example-1473861890.png') + }, + codeBlocks: { + 1: this.getCodeBlock('ng-do-check.html') + } + }; + + this.ngAfterContent = { + sourceCode: { + childComponent: { + name: 'child.component.js', + link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-after-content/child.component.js') + }, + exampleComponent: { + name: 'example.component.js', + link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-after-content/example.component.js') + } + }, + screenCaptures: { + 1: resourceUtils.getImg('ngAfterContent-example-1473861890.png') + }, + codeBlocks: { + 1: this.getCodeBlock('ng-after-content-1.html'), + 2: this.getCodeBlock('ng-after-content-2.html') + } + }; + + this.ngAfterView = { + sourceCode: { + exampleComponent: { + name: 'example.component.js', + link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-after-view/example.component.js') + } + }, + screenCaptures: { + 1: resourceUtils.getImg('ngAfterView-example-1473861890.png') + }, + codeBlocks: { + 1: this.getCodeBlock('ng-after-view.html') + } + }; } ]; diff --git a/cms/articles/1473861890/article-1473861890.component.js b/cms/articles/1473861890/article-1473861890.component.js index 942e739..58d36c7 100644 --- a/cms/articles/1473861890/article-1473861890.component.js +++ b/cms/articles/1473861890/article-1473861890.component.js @@ -8,6 +8,7 @@ import { CODE_PANEL_DIRECTIVES, HIGHLIGHT_DIRECTIVES } from 'xblog-cores/components'; +import { resourceUtils } from 'xblog-cores/utils'; import { cmsArticleService } from '../../cores/services'; function _article1473861890Component(){ @@ -20,9 +21,85 @@ function _article1473861890Component(){ this.sanitizer = sanitizer; this.articleService = articleService; - this.myAppLink = '#'; + this.ngOnChanges = { + sourceCode: { + exampleComponent: { + name: 'example.component.js', + link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-on-changes/example.component.js') + } + }, + screenCaptures: { + 1: resourceUtils.getImg('ngOnChanges-example-1473861890.png') + }, + codeBlocks: { + 1: this.getCodeBlock('ng-on-changes.html') + } + }; - this.codeBlock = this.getCodeBlock('code-block.html'); + this.ngOnInit = { + sourceCode: { + childComponent: { + name: 'child.component.js', + link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-on-init/child.component.js') + } + }, + screenCaptures: { + 1: resourceUtils.getImg('ngOnInit-example-1473861890.png') + }, + codeBlocks: { + 1: this.getCodeBlock('ng-on-init.html') + } + }; + + this.ngDoCheck = { + sourceCode: { + childComponent: { + name: 'child.component.js', + link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-do-check/child.component.js') + } + }, + screenCaptures: { + 1: resourceUtils.getImg('ngDoCheck-example-1473861890.png') + }, + codeBlocks: { + 1: this.getCodeBlock('ng-do-check.html') + } + }; + + this.ngAfterContent = { + sourceCode: { + childComponent: { + name: 'child.component.js', + link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-after-content/child.component.js') + }, + exampleComponent: { + name: 'example.component.js', + link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-after-content/example.component.js') + } + }, + screenCaptures: { + 1: resourceUtils.getImg('ngAfterContent-example-1473861890.png') + }, + codeBlocks: { + 1: this.getCodeBlock('ng-after-content-1.html'), + 2: this.getCodeBlock('ng-after-content-2.html') + } + }; + + this.ngAfterView = { + sourceCode: { + exampleComponent: { + name: 'example.component.js', + link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-after-view/example.component.js') + } + }, + screenCaptures: { + 1: resourceUtils.getImg('ngAfterView-example-1473861890.png') + }, + codeBlocks: { + 1: this.getCodeBlock('ng-after-view.html') + } + }; } ]; @@ -35,7 +112,7 @@ function _article1473861890Component(){ export var article1473861890Component = ngCore.Component({ selector: 'article', - template: "

In previous articles, you've alreadry gotten knowledges about directives/components.

Go on with a subject relate to them, I'll show you their lifecycle.


A component has a lifecycle managed by Angular itself.

Angular offers component lifecycle hooks that give us the ability to act when they occur.

No directive or component will implement all of them and some of the hooks only make sense for components.


After component's constructor is called to create an instance, Angular calls its lifecycle hook methods in following sequence.

Angular only calls a hook method if it is defined.


ngOnChangesBefore ngOnInit and when a data-bound input property value changes.ngOnInitAfter the first ngOnChanges.ngDoCheckDuring every Angular change detection cycle.ngAfterContentInitAfter projecting content into the component.ngAfterContentCheckedAfter every check of projected component content.ngAfterViewInitAfter initializing the component's views and child views.ngAfterViewCheckedAfter every check of the component's views and child views.ngOnDestroyJust before Angular destroys the directive/component.

We'll detail each lifecycle hook and find out how we should work with them


ngOnChanges

This hook method executes before ngOnInit and when a data-bound input property value changes.

The method receives a object of current and previous values, I call it is changeRecord


For example, I have a component as below


my-app.component.jsFull Code

There're 2 binding, type is a primitive value, model is an object

If I change value of type, ngOnChanges will be fired and we'll receive a changeRecord only contains current and previous values of type.

At this point, we have a chance to do something which relate to changed type such as set or remove a class from our component by using Renderer


Notice that, the value of model property is the reference to the object. Angular doesn't care if any its property's value changed.

It means that the model object reference didn't change so Angular doesn't fire ngOnChanges


ngOnInit

This hook method executes after the first ngOnChanges

We turn to ngOnInit for 2 reasons

- To perform complex initializations shortly after construction

- To set up the component after Angular sets the input properties


Why shouldn't we fetch data from server in the constructor ? Because data-bound input properties only are set after construction.

If you fetch data with params which base on values of input properties, make sure you will get errors.

The constructor should do no more than set the initial local variables to simple values.


ngDoCheck

It is called with enormous frequency, Angular fires it after every change detection cycle no matter where the change occurred

Look at below sample, when you type something into textbox ngDoCheck will be called. Even, you just foucus on textbox, it's also called.


Clearly, if you decide to implement your logic in there, make sure implementation must be very lightweight or the user experience may suffer


ngAfterContent

The ngAfterContentInit and ngAfterContentChecked hooks that Angular calls after Angular projects external content into the component.

Angular calls both ngAfterContent hooks before calling either of the ngAfterView hooks.


The hooks take action based on changing values in a content child which we can only reach by querying for it via ContentChild

The ngAfterContent hooks concern ContentChildren, the child components that Angular projected into the component


Using ng-content is a way to import Html from outside the component and insert content into component's template in a designated spot


Notice that, Angular completes composition of the projected content before finishing the composition of this component's view.

We still have a window of opportunity to modify that view.


ngAfterView

The ngAfterViewInit and ngAfterViewChecked execute after initializing the component's views and child views


The hooks take action based on changing values within the child view which we can only reach by querying for the child view via ViewChild

The AfterView hooks concern ViewChildren, the child components whose element tags appear within the component's template.


Do you see I used setTimeout() in sample ?

If you try to update component's data-bound property immediately instead of using setTimeout, Angular throws an error.


Notice that we must adhere to Angular's unidirectional data flow rule which says that we may not update the view after it has been composed.

Both hooks fire after the component's view has been composed.


For ngAfterViewChecked, Angular frequently calls it, even when there are no changes of interest. Write lean hook methods to avoid performance problems


ngOnDestroy

This hook run just before Angular destroys the directive/component.

This is the place to free resources that won't be garbage collected automatically

Such as Unsubscribe from observables and DOM events. Stop interval timers etc

", + template: "

In previous articles, you've alreadry gotten knowledges about directives/components.

Go on with a subject relate to them, I'll show you their lifecycle.


A component has a lifecycle managed by Angular itself.

Angular offers component lifecycle hooks that give us the ability to act when they occur.

No directive or component will implement all of them and some of the hooks only make sense for components.


After component's constructor is called to create an instance, Angular calls its lifecycle hook methods in following sequence.

Angular only calls a hook method if it is defined.


ngOnChangesBefore ngOnInit and when a data-bound input property value changes.ngOnInitAfter the first ngOnChanges.ngDoCheckDuring every Angular change detection cycle.ngAfterContentInitAfter projecting content into the component.ngAfterContentCheckedAfter every check of projected component content.ngAfterViewInitAfter initializing the component's views and child views.ngAfterViewCheckedAfter every check of the component's views and child views.ngOnDestroyJust before Angular destroys the directive/component.

We'll detail each lifecycle hook and find out how we should work with them


ngOnChanges

This hook method executes before ngOnInit and when a data-bound input property value changes.

The method receives a object of current and previous values, I call it is changeRecord


For example, I have ngOnChangesComponent as below


{{ngOnChanges.sourceCode.exampleComponent.name}}Full Code

There're 2 binding, title is a primitive value, model is an object

Because I bound data to childComponent so after its constructor executed, its ngOnChanges will be fired.

3 seconds later, its ngOnChanges fires one more time because I've changed data-bound property values

As you see the below image, although ngOnChanges fires twice, but its changeRecord is not same.

In the second changes, changeRecord only contains current and previous values of title

The value of model property is the reference to the object. Angular doesn't care if any its property's value changed.

If you really want Angular to fire ngOnChanges for every changes of model. Immutable will be a solution for you



ngOnInit

This hook method executes after the first ngOnChanges

We turn to ngOnInit for 2 reasons

- To perform complex initializations shortly after construction

- To set up the component after Angular sets the input properties


Why shouldn't we fetch data from server in the constructor ? Because data-bound input properties only are set after construction.

If you fetch data with params which base on values of input properties, make sure you will get errors.

The constructor should do no more than set the initial local variables to simple values.


Look at the example with childComponent


{{ngOnInit.sourceCode.childComponent.name}}Full Code

And this is a screen capture for result



ngDoCheck

It is called with enormous frequency, Angular fires it after every change detection cycle no matter where the change occurred

Look at below sample, when you type something into textbox ngDoCheck will be called.

Even, you move out of textbox, it's also called.


{{ngDoCheck.sourceCode.childComponent.name}}Full Code


Clearly, if you decide to implement your logic in there, make sure implementation must be very lightweight or the user experience may suffer


ngAfterContent

The ngAfterContentInit and ngAfterContentChecked hooks that Angular calls after Angular projects external content into the component.

Angular calls both ngAfterContent hooks before calling either of the ngAfterView hooks.


The hooks take action based on changing values in a content child which we can only reach by querying for it via ContentChild

The ngAfterContent hooks concern ContentChildren, the child components that Angular projected into the component


Using ng-content is a way to import Html from outside the component and insert content into component's template in a designated spot


I have an exemple with childComponent which use ng-content like this


{{ngAfterContent.sourceCode.childComponent.name}}Full Code

In exampleComponent I've' projected titleComponent and itemComponent into childComponent like this


{{ngAfterContent.sourceCode.exampleComponent.name}}Full Code

So you can see result in the below image, I've queried instances of titleComponent & itemComponent



Notice that, Angular completes composition of the projected content before finishing the composition of this component's view.

We still have a window of opportunity to modify that view.


ngAfterView

The ngAfterViewInit and ngAfterViewChecked execute after initializing the component's views and child views


The hooks take action based on changing values within the child view which we can only reach by querying for the child view via ViewChild

The AfterView hooks concern ViewChildren, the child components whose element tags appear within the component's template.


Have a look at exampleComponent & the result below


{{ngAfterView.sourceCode.exampleComponent.name}}Full Code


Do you see I used setTimeout() in the example ?

If you try to update component's data-bound property immediately instead of using setTimeout, Angular throws an error.


Notice that we must adhere to Angular's unidirectional data flow rule which says that we may not update the view after it has been composed.

Both hooks fire after the component's view has been composed.


For ngAfterViewChecked, Angular frequently calls it, even when there are no changes of interest. Write lean hook methods to avoid performance problems


ngOnDestroy

This hook run just before Angular destroys the directive/component.

This is the place to free resources that won't be garbage collected automatically

Such as Unsubscribe from observables and DOM events. Stop interval timers etc

", styles: [":host(.xblog-article-1473861890)>ngx-grid{font-size:.75rem;padding:1rem;background-color:#fff;box-shadow:0 1px 4px 0 rgba(0,0,0,0.14)}:host(.xblog-article-1473861890)>ngx-grid>ngx-grid-row:not(:last-child){border-bottom:1px solid #eceeef}:host(.xblog-article-1473861890)>ngx-grid>ngx-grid-row>ngx-grid-col{padding:1rem}"], directives: [ NGX_GRID_DIRECTIVES, diff --git a/cms/articles/1473861890/code-blocks/code-block.html b/cms/articles/1473861890/code-blocks/code-block.html deleted file mode 100644 index 6a74a67..0000000 --- a/cms/articles/1473861890/code-blocks/code-block.html +++ /dev/null @@ -1,21 +0,0 @@ -import * as ngCore from '@angular/core'; - -import { NGX_CARD_DIRECTIVES } from 'ngx-bootstrap/components'; - -function _codePanelComponent(){ - this.constructor = function codePanelComponent(){}; -} - -export var codePanelComponent = ngCore.Component({ - selector: 'xblog-code-panel', - templateUrl: './templates/code-panel.html', - styleUrls: ['./styles/code-panel.scss'], - directives: [ - NGX_CARD_DIRECTIVES - ], - properties: [ 'lang' ], - host: { - '[class.xblog-code-panel]': 'true' - } -}) -.Class(new _codePanelComponent()); \ No newline at end of file diff --git a/cms/articles/1473861890/code-blocks/ng-after-content-1.html b/cms/articles/1473861890/code-blocks/ng-after-content-1.html new file mode 100644 index 0000000..a7596af --- /dev/null +++ b/cms/articles/1473861890/code-blocks/ng-after-content-1.html @@ -0,0 +1,30 @@ +import * as ngCore from '@angular/core'; + +import { titleComponent } from './title.component'; +import { itemComponent } from './item.component'; + +function _childComponent (){ + this.constructor = function childComponent(){}; + + this.ngAfterContentInit = function(){ + //title & items will be available since there + console.log('title', this.title); + console.log('items', this.items); + }; + + this.ngAfterContentChecked = function(){ + // If there're changes to contentChild + // contentChild is updated at there after the content has been checked + // This event is fired after every check of projected component content + }; +} + +export var childComponent = ngCore.Component({ + selector: 'my-child', + template: '', + queries: { + title: new ngCore.ContentChild(titleComponent), + items: new ngCore.ContentChildren(itemComponent) + } +}) +.Class(new _childComponent()); \ No newline at end of file diff --git a/cms/articles/1473861890/code-blocks/ng-after-content-2.html b/cms/articles/1473861890/code-blocks/ng-after-content-2.html new file mode 100644 index 0000000..d5582a6 --- /dev/null +++ b/cms/articles/1473861890/code-blocks/ng-after-content-2.html @@ -0,0 +1,33 @@ +import * as ngCore from '@angular/core'; + +import { childComponent } from './child.component'; +import { titleComponent } from './title.component'; +import { itemComponent } from './item.component'; + +function _ngAfterContentComponent (){ + this.constructor = function ngAfterContentComponent(){}; + + this.ngOnInit = function() { + this.title = 'ngAfterContent'; + this.items = [ + { id: 1, name: 'item 01' }, + { id: 2, name: 'item 02' } + ]; + }; +} + +export var ngAfterContentComponent = ngCore.Component({ + selector: 'my-example', + template: [ + '', + '', + '', + '' + ].join(''), + directives: [ + childComponent, + titleComponent, + itemComponent + ] +}) +.Class(new _ngAfterContentComponent()); \ No newline at end of file diff --git a/cms/articles/1473861890/code-blocks/ng-after-view.html b/cms/articles/1473861890/code-blocks/ng-after-view.html new file mode 100644 index 0000000..4a6b145 --- /dev/null +++ b/cms/articles/1473861890/code-blocks/ng-after-view.html @@ -0,0 +1,47 @@ +import * as ngCore from '@angular/core'; + +import { childComponent } from './child.component'; + +function _ngAfterViewComponent (){ + this.constructor = function ngAfterViewComponent(){}; + + this.ngOnInit = function() { + this.items = [ + { id: 1, name: 'item 01' }, + { id: 2, name: 'item 02' } + ]; + this.noChangeCount = 0; + }; + + this.ngAfterViewInit = function(){ + //title & childs will be available since there + this.title.nativeElement.innerHTML = 'ngAfterView'; + console.log('title', this.title.nativeElement); + console.log('childs', this.items); + }; + + this.ngAfterViewChecked = function(){ + // If there're changes to ViewChild + // ViewChild is updated at there after the view has been checked + // This event is fired after every check of the component's views and child views. + var _self = this; + setTimeout(function(){ + if(!_self.noChangeCount){ _self.noChangeCount++; } + }); + }; +} + +export var ngAfterViewComponent = ngCore.Component({ + selector: 'my-example', + template: [ + '

', + '', + '
ngAfterViewChecked is fired: {{noChangeCount}}x
' + ].join(''), + directives: [ childComponent ], + queries: { + title: new ngCore.ViewChild('title', { read: ngCore.ElementRef }), + childs: new ngCore.ViewChildren(childComponent) + } +}) +.Class(new _ngAfterViewComponent()); \ No newline at end of file diff --git a/cms/articles/1473861890/code-blocks/ng-do-check.html b/cms/articles/1473861890/code-blocks/ng-do-check.html new file mode 100644 index 0000000..562c4c5 --- /dev/null +++ b/cms/articles/1473861890/code-blocks/ng-do-check.html @@ -0,0 +1,41 @@ +function _childComponent (){ + this.constructor = function childComponent(){ + }; + + this.ngOnInit = function(){ + this.model = { }; + this.model.title = this.currentTitle = this.title; + this.noChangeCount = 0; + this.changeDetected = null; + }; + + this.ngDoCheck = function(){ + if (this.model.title !== this.currentTitle) { + this.changeDetected = true; + + console.log('ngDoCheck: Title changed to ' + this.model.title + ' from ' + this.currentTitle); + + this.currentTitle = this.model.title; + } + + if (this.changeDetected) { this.noChangeCount = 0; } + else if (this.changeDetected === false) { + this.noChangeCount++; + console.log('ngDoCheck: called ' + this.noChangeCount + 'x when no change to title'); + } + + this.changeDetected = false; + }; +} + +export var childComponent = ngCore.Component({ + selector: 'my-child', + template: [ + '
', + '

ngDoCheck Example

', + 'Title: ', + '
' + ].join(''), + properties: ['title'] +}) +.Class(new _childComponent()); \ No newline at end of file diff --git a/cms/articles/1473861890/code-blocks/ng-on-changes.html b/cms/articles/1473861890/code-blocks/ng-on-changes.html new file mode 100644 index 0000000..76bfa97 --- /dev/null +++ b/cms/articles/1473861890/code-blocks/ng-on-changes.html @@ -0,0 +1,23 @@ +import { childComponent } from './child.component'; + +function _ngOnChangesComponent (){ + this.constructor = function ngOnChangesComponent(){}; + + this.ngOnInit = function() { + this.title = 'ngOnChanges'; + this.model = { content: 'This is content of ngOnChanges' }; + + var _self = this; + setTimeout(function(){ + _self.title = 'ngOnChanges updated'; + _self.model.content = 'This is content of ngOnChanges'; + }, 3 * 1000); + }; +} + +export var ngOnChangesComponent = ngCore.Component({ + selector: 'my-example', + template: '', + directives: [ childComponent ] +}) +.Class(new _ngOnChangesComponent()); \ No newline at end of file diff --git a/cms/articles/1473861890/code-blocks/ng-on-init.html b/cms/articles/1473861890/code-blocks/ng-on-init.html new file mode 100644 index 0000000..87803a4 --- /dev/null +++ b/cms/articles/1473861890/code-blocks/ng-on-init.html @@ -0,0 +1,23 @@ +import * as ngCore from '@angular/core'; + +function _childComponent (){ + this.constructor = function childComponent(){ + console.log(this.title); + console.log(this.model); + }; + + this.ngOnInit = function(){ + console.log(this.title); + console.log(this.model); + }; +} + +export var childComponent = ngCore.Component({ + selector: 'my-child', + template: [ + '

{{title}}

', + '

{{model.content}}

' + ].join(''), + properties: ['title', 'model'] +}) +.Class(new _childComponent()); \ No newline at end of file diff --git a/cms/articles/1473861890/index.js b/cms/articles/1473861890/index.js index 8ebb084..a91be96 100644 --- a/cms/articles/1473861890/index.js +++ b/cms/articles/1473861890/index.js @@ -1,12 +1,13 @@ -import { article1473861890Component } from './article-1473861890.component' +import { resourceUtils } from 'xblog-cores/utils'; +import { article1473861890Component } from './article-1473861890.component'; export var article1473861890 = { id: 1473861890, title: 'Component Lifecycle', postedDate: 'Wed Sep 14 2016 21:04:49 GMT+0700 (SE Asia Standard Time)', author: 'Minh Van', - cover: 'blog/resources/images/xblog-home-cover.jpg', - routeLink: '/blog/articles/component-lifecycle-1473861890.html', + cover: resourceUtils.getImg('xblog-home-cover.jpg'), + routeLink: resourceUtils.getArticleRouteLink('component-lifecycle-1473861890.html'), relatedArticles: [], tags: [], description: 'A component has a lifecycle managed by Angular itself. Angular offers component lifecycle hooks that give us the ability to act when they occur.', diff --git a/cms/articles/1473861890/resources/images/ngAfterContent-example-1473861890.png b/cms/articles/1473861890/resources/images/ngAfterContent-example-1473861890.png new file mode 100644 index 0000000000000000000000000000000000000000..0bfbcb51b005f1973503f8d6756f2ecc27c9c325 GIT binary patch literal 87587 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 PD0p2})dI-aBKW@mko&=M literal 0 HcmV?d00001 diff --git a/cms/articles/1473861890/resources/images/ngAfterView-example-1473861890.png b/cms/articles/1473861890/resources/images/ngAfterView-example-1473861890.png new file mode 100644 index 0000000000000000000000000000000000000000..9d70c0251edfaca2926c978f0cf8f91f49fec823 GIT binary patch literal 68080 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%0DEN^0{DOiKJO6BKahF+ArC%jf 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 PiL}*h$ChHU%lZEWITzt( literal 0 HcmV?d00001 diff --git a/cms/articles/1473861890/resources/images/ngOnChanges-example-1473861890.png b/cms/articles/1473861890/resources/images/ngOnChanges-example-1473861890.png new file mode 100644 index 0000000000000000000000000000000000000000..2187f8f49a86ecd589705e0ed489af1d94c98496 GIT binary patch literal 78943 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 literal 0 HcmV?d00001 diff --git a/cms/articles/1473861890/resources/images/ngOnInit-example-1473861890.png b/cms/articles/1473861890/resources/images/ngOnInit-example-1473861890.png new file mode 100644 index 0000000000000000000000000000000000000000..3a154f7cefd074720931b22e472dbe4222b26a75 GIT binary patch literal 33746 zcmYJa1z1#FxHdd=w{#;V4bt5pEhQ4tE#2K9T@uor(%mhnq@;k7(%sF!<~`pz|8|w$HU#{fgp3IO7WL`<0{%g9lz;C6fnW|o z|G=a$W0Hb{NUm>`Wsp`;urYZAcLnSF|2rh3<0|3iYUSVzDX$)t2ZzvI!69jL7gJ|z zM^|eHdk7v1^-FLZ6?$CC!O_dv+S1Au@)c`T5FEw)@2Io6G4xa_S8F?S2+uVZ3U~(v z`i_Q!g{z0LvpK}T@fmtL+J9ee?PB`T7@X=1Y3Xf@2ZxcNhu;}H+gsaPLV8KJBET`E z|M|R|v#B}c@;PMxe@~Ngu(LC_cZFPyruKkih|tqCtzAEwL&}bRF+dUhlLBw1_1+x+z2*JW)6KZRC^{Va&)QqRo)70HTUqA@XMt>cDC$&iJdS4Qp`=!UK*y|%c+)QhrLaA$aXA8c)RIk&EO zU=jr+=Fk0m|H2gwi?8WozY}xB?1~wr#)|?Eaf(Zq7V-7#*G_vgugokgXxQ1Yy1XwX zd;A|cjQim)_U9)^&doR$!w_W*KM1R(B2=&9w(6w?WpI6R$gypgs!5#r@lPbRdyCaj z{Qmv9AT$2$j58{c9vK?j+bJt1uCcs*FR@R5M8Hi3w%);vi>}@Yk4V#iA>t0Ph?K}y zi3mZ$TJH^lo7{DUKoaH6E`0AUcGG$7NTdr=Evvo=dDurU`kjyQu~H;EUH74h7V2~t zm?ivD0)w=wP#wgq60|e-FI;F1A-e%4vuu%zko>2MUtRX>qLs9TJ+z)iX?P9gq|B-Zc<@UeZWiWn@ zA%3mPQ|JG9XMD2SM?jvLp8jccbW}Tbc;|1r?gKJ4RoENXeAzy_PtMPw{MQrVLMO;Y z!N)n&ZWCT;lmqQ2Y^P5ed&e85Tn#F4Ej1cJ>24$iNw(tOd8p2drqTgFW?4w-e1`rEY!iVcb>pzWo2dj$>}rV5X6lhGP1Cs$0XyY>g@KuWU?5~LP?Z| z$HKxI%@V-7{_Dd&S7R6thlEMR$XGVSW@>0?xVgD$G*uv@e3h7*8g4oq*SECPA!AC; z?+AfIM6cEHn}=st~76^YVmT zR&bSPXJ@tkkKSK(n-p&74vvrGUul%A?o1W(yY0Prx}6AUwo-q-4tS23t$b%XU83xH zf7r5ibYy?k8XOGU`TTV6=;+v6S<}5(P^X}%h``5JxNl;1`VyY;C+zo_V8(OW)+`kB{%GVGl)HTieOS#bAY25 z(?Kdqz`5_5Ek0BFxHk3sN}B#ub_RpA$hwnb_jtl|G@TPWQaYHQ+YQgK!+q?)FLZ;S zmY#lnT2)NO+WHl}azF8^_Gh0dc!RsG>=lQtMr^v{@vbTkyGOu*22sk-8%gV}nf21($ z(Za(Rt@VdN0+A>@A=fJbVqjXF{7W-5=?g|sV@eqr8ygzW7Ft_hhkf_%-3vm(!h!-= zO1}#n1qFp#zkBza`}=|U`4+A1AGPQj`;^~fa0hc|xc{miDY5$f_Um0|ck>ObH8QZ)YCd!&q@;xDwb=I!48Wy^}*n@;yu69sA#f=#KAly$Jhv`(9K34WH)+S5odv*bA3drpFAvJj&Ys_}N zcX>|ThW(C2{X-bVdXIVo?lzs{xbC7x0)-o~aBOu0OOCCyrops~Ur7wpY*^g)oQ%vN zXCN9f;}e%x`qOinUcri+#E}dM6tXW$h@_;X%WW=5Twj!SbW5itsUVnL zfKj0erD9+}LP0?x;xK|h+7~v@{`~~UgoH@n)qKFe;?zZ=h6i&MyfPl7cl@!CTK1{s zTdu+`2Gu`#QSb2Jrau@Oy{E6GjTF7k{T519_;^Bs5~BylatG&G^}_QE?T!MTiuDQY zN8_`x!rjkFdvfGI-{%tu174h-o}OG@hLx5w;Ns#YBqzg3BCl_3BxYy-soNef;yCio zFelCu^%I1)9%#kUC{gOGH6B>q+6w>t`NhS~lvHcEGFXm3TSX~6S7D&DY-(!CbGJB+ z!*ZO=_u+Jyk&&@iIvPBQ3H?1Vh|IH=*<_1;knKI06&x!*r~`kr0Bltvi%H3_MZ*@Ox`4F3nN0QZxs z1R)37a$q?lJNs~Hu76a(IFZunoTiAu!NH47yr=s$J#k>AplQka z`ucLX?alB~Mi`4IRRwPTp!kF*8lwF7wmqa%7IxqR1aZRH-cWXaI3QzHRCe8?*U%?u zGbDl59|OFqq$tgP%I3G2VuKRkDoFm*6!ZeYP>c77#}?`4wdO>Ty=VH4Jr2RNYYpuw zy;l^P4;Vf{#R0~y0ZeB>p~$Q2n1zc!GWyQ*d``4Jd1K-dWOKY7;V7!=uK0Z)WsFIW zNUSY^9VkfdN=J;HttV&Dx2Wqa{`{&p;Z_rwi^$`p^>A4e$EncTaH4zfN*;L^YQbNr zFN_D_M04_de=M$Ag}hdyG`_wjwxqlZ^a`?St>SU(AU1#l-)k53R@lg%OnO_az@9Uw z&n56}O`UfSI-;tKDE1?T<65%d+l6goE4dojc?V%>8XUZ^Y%+~ROYH;m;mK!*_o<0m z=^bvwWv}o)L}MttY-RxPBV=T+^FzBR)_m9Yfe8Er#wj`?gBCXv!Ec|Y{k}n}LS+uz zAU^+yo%n0&H$wUzp!jgOH=QVc?lVePOH@TLK8OhBpSr+xVh=HK|-{hIz~{hA9Cmq~#u1gA4ZTIYnnfc$Lc zP_MpV>o=5g8VNPo4v&kbQ z^R?-bUh?&t->2iY`7(O00YRc~g6B1FKP&xd7N`?9hiMH~#7@zNd-s0QH6pxV+?JLq zb#}%6$j!&Zr0(mrAj8~O^9G6kkbPHI#+{AaMfqYEbhaIA;oDPx=TGd5Xejv`QrixUnx(0{CO9^=~z%f4P{ClZVoPep3ttXG-7c6iIB<`^lujZlQ5 zTMlQF_4syn!+%EbzHp8XV#A<2kokC0CpyYCQcEP2R@+=pv>tL!_5CjF=mNQjCgE9T z8Q)5kdfGr*!$TmxTHYVl@xlBK0Zn|#mVYMxFm%wA16)vG;!r$xLZ_$AX@?U*!Lry` zho{%Os%xFQ`QH(&p0>80?_B1rnQ+hXMmuu6-np!BQvEfB$#s%FcDwR-5Xwk#&2YM= z8ARA~oiu+y-JO__)O3sf%RgL=D9d)d^NNe;4{5x(k^c*28J7q1Pv_%OFF0{4A}J*a z8zCljH`Oh;y!20leB*Ok0_&Xk{+&0bI)tKCvH7QYB{5NwctMQaUYM<3n4kVa0;?P6 zIh_`^8V$zyWn01sgGgc#X>EASR+RH4CoRcpY0G_(`))h|YB8O!HgNRtAhc&mO#F5~ zU!})zkjd{v!=$u0Jj^$_UGzr&&6~c-e6s$50aCJ_x~Gtkkkh@&n&1t7#uSCgPg$r+ zS^RIU@JL8(ymBoT=P&gFl;SpeG01IvDK5u55}z*oNIn=A+AjA#4_$b!-M#lz-W$uW zeC>%@%Yx@=#K~{RYBo#|a(_x}#T1n{YcrOLdRUE|gIYxZt~jHB8`|%#R3dKR_~boe z12<bUgE)o8=fkq? zF8#9Jc!#omQvfI}G+1JBp`l42_ic@3*11||Cor6En_CumZqEQPw*cIlZ>KTiz17ECJwYBGt!E)#)pE z#Z;C)F?9ICwe(Qzgw|Hs@xsWb3$`shhM0Ra3^xaH>@BI=8I4b$%7pySx5gHl?J`fq ztnV^r#7gahq%lK3B3T^4Y>p?CJV3r5MdW|K!}t#=G%xuRlc0)MX`>xpS|ynNq+axA zFQUZysQdVPKDrlos<{&~v1E zUIgeuoZQi+!IZY&=v9-aO|swM<*l-d+YDLdQW4Mc`o({wN>jQnA@D`_OZw{mhm-Y$ znp*=6**`yahj)DnXmU$<6>nm`kzQpY9|rcoJeG=YE@ZYPlLmo`F5*dDHf5F9;SPV6 zn^R)Gd8dlQg7XIlK>v%QKQWIIU3uD-iJ55dJin@kHZm_9?EL{amo-7@@{wXnK{Y9_ z6D?F%Pe@D*`e0!n^XkK59KLOGyAJ1&EoDKIc;WU)x>Iv)XN)xqDsDmDVv5OrO)2T zzlt8eAqn13`XsL;U$Ac+^{J7Ce=Kzh4>&|f!h)6g4wg$W|0OoWPb>HS2?jj}E-{uB zFPt9Cd5(THWE%~d{F_^1CU~!RXoY&GJB9J$S>hAcR2t3`}ZmOrR!z=-`V910ary@=RJjF0T|0UN&h|b8Epb_5qGyV zyinQM7zM80p~FzxQ(IHCJUJ@-fT!sN1w&c#2bw$-(%rqy%@FY)s^W9jK%^;*eyhR~ z_U-xAPPiyLZSRpnE|zVd3F6Whm+f)mtApRIZu{DDs>Ku!$~slrQiLthC=z&4(b0*v z>A@_bSoZezM02v$!>Jd!2?>FkQe&x^Xid7TttO=VuSX|p{O`3VJD-FTa&j;w&ma)O zu_1KX51}|kl{|617GDrjwOjoq5WAZ`iQm4}R&{6$cy2~sG=H3<-6mPM1WVan^e z5ok5Q>a*yeEUL>a$96q0-M&(wh@~WL2}hBT9pJy8TZZ?9K<)7YrYYBpo-M>ESWT^wiXY zBAKtkFu#Obfs9-^-iCw_op($2YkqgCvbiu~qG8K+nj8x2VZ ziQ`oekT#1fSAtz_4HJ&H#gnh1wFr#x@$roZ!ZFfCe0a6L>I4A_3xULu2?W1yupkz3 zKU$8=$RL68{mUylTH40nS$h(TK~YhtXHWOX$&>*Pi3dw96MGwn;O~l!7x?&zc1z8P zXJ^iUxJd!Bpa^(S6>m<{)UK;^;Zy?nE@y^w;i;-*oO;Ai>8hih^7m=2{OjA>a_j3# zIehicU=Zmc$Pli8rw8vxpv<7$i`^f*<}w*X&Y!qF-_CTf>u4owi+oRXuo zYg8_D;k7>A+S2Beg)=3|mg_Pl*^S4R#H1v+`trvCR*WFvAn~Q#Coo3^d>77af6Wm6 zNxfm;+4jVc9}25^nmcQTby2A(t#Rl2F|>+*W3!t zZL>S>y3U!Lc(^@(qoRTdo@;tK(b=MHP2%PLJYGORz}Z2=L=w>Gq9>HW6?**jDxJz? zrViEA(niYUD2bE=IRA2_t0^wtDem<=eNR`TQdiwfGAG~+z>TT!Q zxNK$^p@WG_PR^ReEJity>E`6b`M$-T{CB$>GYUF7t*Y=T{P&R&Dw5c6U!V|fo|7-h zU+rUFNI7xLtlK)io6I}e8GO|98IKvCpnRq?!;qh~A^!fRP2R@FW~Ae|Tk+|-=Q)uf z$1@nL(j+iLr*?jhXAym^uBKmVabN&fW;Rpyb~A#~pUS3bap$SO#h}$O-?4|YOAa*R zI50LzX=!rZ-sZ4v?Mm7Vkolh|0-fmzzecaR6=FKF_tb43ZhECW#Rxi$6-5J%M9&UZ za;YLP$#JFEz|;8N^Ze*=Hlv}Mh=4|rFgmJ~p9vi|z7^l(hr9in{^no5)a#805Y=^c z6(TCC>GhgFQuEm_b7X)nP3;Bl_YJ^2UAserg9%_s;l;|Drc5)0Cb&D{8MZkigdk!_ zPUMK>Pw&R8|HC8~3!0W`-}$2HiqGb{9|qdy%uWMnaw?`qc1C&c8etQd2A&%P5( z7!O6^%d4u&>FSc?_}^KR345w7q=EAOJ(*zxh;~FG-rPVRVm-Q^tI})rI;R&FCh;&} ze1ZA^p5+i&c58=+c8%%M|a;p;nwu$X)XMt5Q4Ag3Zq}(U!L9CLZ zqE&Fo!=OfE6B9=s9304Y+ydEfvQQ2Ss_#T#QGPq_d5$Y8qAfJlWWs;C*}wu7l3!2| zwyZ-go8Ji*3^k_;*)8$xTTs)Ej+iUCBPCO{Tj9_4 zPdnBcVPQG%PJa89t_JuaapTLBRaEq!ZVcCXo|+u2^iX!V9|p(As}>q4(&CnBG6APV zvUHl7ni>Xx(Mg*o+2O~lC5P7I?)#W}I*7QI7QRZZXlx`N1CaPyP9sT2r)@;`%d4wp z)zxtcSacv^k}wVq4*Ff*TG-MJ7GvP6u_`Jnr#d{25r<-QtL#t7kg55dH<1B7NK8pV zfOxKj5r#g-3!foF6(LBk%Y=xfQxACjH$X-_8F?9>=djYvnvfs1`La=$wX>`1t(sb(sNY?>UA21o z$^CJU>G9t#&&SL8utRW1un_$of2gt`G%}HIXUUv*0@FLuMib~ zVQ+R57VMBhknRdyW^B3N(R8eE2*UY(G&W*1h$OqGE_z=&)w9DfG7J}lV|;SBM49V< z_X^D6H|Uh2WLH;iUT6o0hrpikE@V4AJcJ6G|EXiFtV2K*+#`+$z4K(=Fu)jy&6g#g zKYxY~lbl-JZm6nlCmQ|!y${UyI-hHMQANUD9Op zz8$E4-4ADq`e2>r20RJy#|>og*ygD*>hj3t*&EB7-p|Z>a1^*={oyx$sh4jVmq%5} z=3lSyJeTvj(AMZ!B4G890&D5~SSnvn!R6DQ2yAGA>@iO$Hjv{V9?mCPK`o8FO8NY` zcWH?<*YAoLXtl;O;fC4Y{|!pIuG-0;k56a&?qQ|kB}{!;J15*?fLP82D~cj#x>RzG z)vo&k3ogIGGGz6vLkY1W24S-O|q!8^d(?q0Z+FKOiWB_>gvCYGJ%^h zI5@ak7%wWRpn%%_bY}~|E-Ylwgfl9ttc_PdfEbLYb+XH(6?cL{v7@`Ytb~L_{G)pHxFli;Hr0e*RWZFZxf1#|9vfmvL(v z$~&%t2}N+VvnkV=t{!EtM~ygQPKl9jRN+diWDh^7*9F_Dx zzE$@<0pZjZ%-10z0D!%GD60T&2QZAV@$t=@E0dCNeSu+#jEo$ZoQwxy!UQ!sI)cKx zEa&Ymm{*{%;9kV@)Kw5^mTQ8mNlLu`_5C|ab#?XSx-xp=&wo2hE$q-aPOUZC>2(g( z^T8_XU0I>T61l)`{`fl>Ok1?WtK$`{V)e)r=65Flen62ev=HZt`f)gK$}0iI9F2gb zth77xXR%^ht?4jk=lxN~$@zH$BR*Viu<^~w+Rg2DE_90LV~9CC2{WkXpc4|N5lkFA z1l*H0JFLWUntl_{S4)qzPPx_4Whu_RUdKeg|*;#d!Fp!snr=Hs%SwNWKf3g7g zReT&)lT=Wx`e!O@NJGQxU%!5xoD5)@o^5`=*~)a_@H{d4xY&pS;Q;6WxMsjvMFc$H zwZ&-Jbw~~o?N^3v-h%BMBlP6rU!E+Y^o}Q4?qYU`g~}(yaseZw%Ww-m;zhef|Mo;~L_~yK*Md}vLfFP|{02aTVO3RCDXN%< z$+{(No7>yTlap#mNlB8()J666Nu76lm761pFUf@)j)GK5UjjJxIV~-@pP6BIuN+HQ zha@6y^~896e_!#8Mc5Ze1(NNbC&ZqY+bhFJGxcoWF_o4i&CKxbMH>s`!sFH>7Htj+ z6@C30Gcz}bTcy2J!G7MuZ>KJPPZ9Xd~Afvdcgo$+ZVZoYnn#mRRYKD?%~@w6clU+g1(;Flg+m-mO7!*Y`$}E zjMbwR9B@Jw#FfvCN4hEAwTPP?y|uwHlT2{p_xQNi`i$ z1RNY3#42VEr*&6PZ*SDpG|)g-De)KzXc&?IPZAp}%BC~r`_&@jVmszVYUE4-;G*Px zgXP3}oWK28rcmMglicfi7TxGhVngk4Nww?k;e=-na{WU)5{r7;$hI(I5BAO!#|s5W z;6d8IRh3Yb+`4drG*^Ojq61n@ZEcg=vwt@L*i;E(KATreSy3^S4%L4l`ly%6E`}nC zVZCs33JUi~G!nKK4&)@}0|bUbr{3(1!NACC;B@wOAkwg~91xqCnXSeMFzYpZvoAO< z*_z9!(_8Ass74!rJZ>B4XE2$)sFg-PGqeIzn*WJwv-CrWkZes6Gs_pAguXlh?%W61 zgb`!BYtF$HF$66wuTsL$LmI@NKYjqlzvo?!3@V{RlhH^sz>M$!c{&%~;$#-&?@#7n zhkWK*7rJ{0Q9^Gf2K5!=+eKJuQSbab;T7Ui|F?L;A6Vf3R4-q`b)oAQlg*<6EGPd4 zg>S|B^*8&k|97QL^I^upm6Q;1^)GNh-E55{#S48P{8CXtwtk!&%<{po`s_RVP8wxM zU)f8J&*4fV+0@GMp=0k%^Vzyy`ChxrE}Fvtb|(db13u`p<<JtIZ`RQOyMc&<2mpZj5rKga;j0BxexIw4$<;BB_t*a+9ngTV zv9SXIia=veqkDw(HuzNF_sYq3{LbFY1wIV8I~bAAMCB| zh?p4k4gQv8eV{s^+~Wb`by09^esv-C^3Tk&Ag=9)w2q|p7ZCBL>=s8=yPdyG$Py{2 zNh8~3*sfRkvqb6GW*j6D@h@lIu_gKop;T0ysaR7twiD^snIMekip2v42@AT5-2YG= z>I0xN3jg)oz{nDGLj~sS$j_f})bM~_4=mJ~I$iE*K~p?p4<~TW&dwQR#~|sU)8j8< zVq%i;`E%&tpfrS=z9ugZ;&Xj81V{oDe}7I%Sp(QII64}Q&7eILU`FD%Z{I@E3O5M` zv?0U5A+7>)#_xB>?X92LPOu6=f~p!c}2y6c(JEX6o9ySlLv={BSXo z5i&d#tAwsAtHutvfwau2b|b2ieqF&E95!q&bVw~1w`LDD<&R=TjH`GVBO@y9uN*o= zIK(I(9@ldu2$@G6xn7#SUfhw$_B8-0r*25BO3fR1W` z*a^S~s7OWtmq58H)J6vh0%#QgpciVa4@TlqC(2V1M6)W4d;j}^uaqN93?!1OaaK)r z^B!Hd*vTL&bqHgCgM4Ygu-(rGdV=*2cAK$*6x>)=HP+B3>n+Ke5lAQ`! zhQtThNdy}f+(AgcdY&nOE;2J*C13<3%CR!i-JpvLt1KZ8mE7)sq8T)@y%Y?p6c7mi zj_Jm-l$6uDG&MStU~@vroxP2{T_h58aS1>1Tdom7pDeXEXIcFr>!49af3$RyE{6UM z{27{_m2Sp3E&N!qcRjtewY;KjY2DYzH7}iWlIH8@($_CNN;pHWC=x!1AxurtW!tAX zl`08VP4BJ(;IXq~)!^pFTHM~=u62l!EOYh>e>8vAMlWTkr)!lT^XiIwFN(0`Ra4h0 z{TqZ|ac()8zLxZ$D}{y0W)iUK4jz9sOey?OjEMy}0V(-e?(@U&YKn+Tj_~i*1zA7h zu4c0X*}G;ddyGrF?+f36T2EA5ZT+}ROpurh(cCQ5-h+)@u9Bc0sUevIR!K+MyPdc% zK2~Hif8;&NGfcfHs>*2xttiGtHL;H zfUL(-!3H3PQw^4?WFp=(G`4xv05*hTLxYY$z5oJ>&52H%J|+VLLzaLGB6tsIj8NVU zMloNFkt#(Y5hVU9DwqzI+cZ8Azla`UWMYy8>>lWur@N)OsD5{Mck3Y3W--y!Hs9CR z2Lr*z!-E5<#?4K$2T;dAlI-I+9cMpBd5t`+q)AhEP0v+xt195uGN1ghAPF85X7aSS z`I5oL932UtyDK``{6<4#8!rez3`>9_=t2%3GIZ=9rSW<0KtFe`z+f;hBm|Bk;K8Z$ zWbar2?G{Dvf}3!2GUy5Y(o8O(q;tQZykUAr`%6bSS(5 zji$f9|KyhskE5oNJ|IE=Kv4jZ|(5afCS{2)$nncKx*&OD8|e+QS#6v|G487~`@Igw>m~c}%gDND0J8H72@QZb!Sw|llncRZ zOrY+ntq5ZcKPLBC+gg9A8Yhx8Sv^CCWpyDUB4R9}LdC)w2F@LJb`B<%AF;HYoZQ`F zUWKx>bf}Y|#MXUH%ZeGB^5wCpHLj$jBzpf#r8w(6FDILLm;pmG6d&-BU-oU-<}< zJ3I{jEn{vg+&Z-jb@F#m0EI>kme{8pwcLmT z^liKL-u&_>%dx03pSLyjaUv>ghH*frCVt;aaxmThLs-_7Hyq)Ae9L^IxnZ?=ykJCd zAK#JKic3kGc$O)7{e|uScD_$jXA;HdbND-Wb82kR!<5*C#No~Z={;)EQd@cTVvooJ zU~hNRo6TQP=X>y&`q7i>;}d!*-z^dW+)u7usLs`OyJnq7L-~8W@a;Y>1k?i%N0UH@ z#r~n0G*ejHhHrThHj8gnfvVE=IHv40vwW(2$Hyl&T_LvfXGy-7cdnE!#VbRDxa|8= za4>*NR0l1zc;bZ{KAw{<@iE-arfB8u!HCcWCCOBCQpR|(JB*YCpQ@+o%gil>;3bEx@6UDjR^0WCamCo{YnUb z0^4zacdVL!{p-k3TE$Gj zqqSSgh6ZsvbtXdsLVed#OWUOAkDotr2<2jy=U&*n%5F7B%R%u$l#8br0uv;x%`Lh@ zy6^*>zb8q3V@T_3n$ex%_dYM%Ks2*~RDf96;mv(V>{a`R2Ur|Q`PxZ;bM}5|f&_|ri^h|T7+20p0xKQu3`q6j$UrD& zt@xq1ntA%#ZfWcYA4CL3#=;~z^(dB?mpNGA#YtPE^nQsMzL&E~hFXxy26d;g*Tk@5 zAD3IFTK$-j&uvu#d`Xy?cGzSK-oC4QPs83nKR>TC`EQGa;S`HF{H*1tli55Dp!XYJ zYHJBboA5ToFcO3YN;a8}igKiy=HU{4{!5UjJ){s~baHmKxhs>kvb*oVur*-+O9Bv( zMD;7UJF42V(ZMTjZv4luVg+=xDfVwVb+9lnFf#?_Y6bv%pkG#?5w}{B z;!$E;IbiykXJd(>SLtEbo1;NHejzW$m9^RzIc&|uL^qV*W3j&%ytro#?P)(Nrjh8u zY@CCB#p*7TX+j&mv9b1H;_@H}pn4YFM&$GDi5k+D@-}z;AjU+vkZlN|Xpqae(+*-> zkYqkswaOjaY!;j$24tdaYG72dJrD|N=*8XnKch<2B)ZbAZa#BSFRXDVNfwkpDi@DU zQkwGq3-Oo9wH8E~<|YJ_#g3y%R?3fr9w(gur)!ec^5YE_Pr-k3uYatohZBxydIYHeoK}LZ}+2NQ~`}@G`3I&PQ zw`7)sU*AKN2>V?NE2QrxGW-^=Wvwk1MP|{hQEb(&jksg+tJ8qqqg#~`L-E1lI&6fq3TG-c<5J{SN^5! zw_Yo0n_!J?t`9}izI++-f`A|i_3|Tm-0hbM+&#R@4*LrVb%Vtz%cC%N9?jvK`g<=>puY9ll;0vBvM$SpGfXh9;O>NVfzv!FN!e_evotlCX7 zrMi=>3?3xe=}iW;Xd`7}=NH%1bCz@mWCq3#4p=@uK8zR9a-iB{Cl9VDHa4Xs%)FTL zLFx$LAUcd_z{1#P{24qqCdcTslv8c8MSmoTJ)p_?n~*Aw2qUwQU5$F@HKtC|pniWg z&OqJ?qLq6TiqxXuzYqZyek2WDHnSY#u|q{eLv!Io@5S$NL>4{JvBck1l7rpoc0i3R0d8_( zaZ!>!nV2pEanIi@>W9N*cb1>v0ryu~HSDBhJ))(#xBp{4hCIDy=yuV#sb)ANd%Zw6 zXas1r=DLdrzLa~2Ex{?#p{nY-uJm#h(R_) za}zFCjIk)bZBrOyO0*K5dS`Q!RtEtC%CQoj&u~`S-rSp|N+1^cfuJQs|KU;&7!oo! zN?ZT_{b%#Pw!}^Qrt&#;~9yC8rpj(6859B6w zM8(C$P+i>V@y-nr2%_$jmLET|K%KnBMO{xHpN&X{oIvnRki4&7(Lr%PIy&k<1-8OM zmk%E*DyosCWrR#L0m`tRAkr75aHoxL)cpJlR+v0IJYWL`k*Kd{roroc?@#}~?i!aW zG@agSpNigmFEvdCG;D*~k@~u z)*saOwz6_}>kR5}f7w;I*x+}GUz`R5Eo2x#PENCt1otnJ5jFHG%F08dUtSxVnuY*l zmI8=f(Cs0Zl%nWBi5<-rB7{C$kP?A`0E1f`*r3o26u?skksUH1bP$R83yVHKxB$@+ z7Q$<{2w$!l^}E4Rs$A0q(3@b6CNs@k^1Bg=MhlO)`hak^YDoSEW+^z|d-*M9AvlVJvXa zK;O)7ZYBWY1awc0X}kzxq_l}<1|1MA=4%Z3=5rS{9-uyODf)NTZsm{}tM-IO;+2|Odh+*Q(ETGq{A>;b@x~+zGW5Si z0F)G<4Mt{W;OvnCx^W8J8epkQoTxPO98$ann2S{~Zi9af(W13pwo3aY2M0E&Ndy$( zPC<5IDy1Px^aG%GhB-lXIPeT09PMq*7R0S%U;4of&SHT*K2Y~DoCc0&)VGF zACe1s2T1u#3gwu&~;!xYqDe+KDZ{&+rw`qCo4R7(P-42t5`{}7`jX0t= z;QI#-M9lMWx#PL;y>9uoEye2lKlTHN5lA{Z)^<;zLiGqn!U|6Ai5)=sLZ9EdjQ32L zVqEh%W()G%Jp>CTV(6y~fIOrGa*!s|5ZDM2I&txMz2czX(iU6SPPEC72{K>i=H@_p z9B}A)oHHW@#06}Jv7N8Zuc$zUhAftQz#|4Kn6#{HxYqXA@DkWMLRnT`&bc@b6cICX z^L((|DvjOn8;Gi8{t@GR^>TO{ebdHax;+ns#%zouJF8S8!Dd?gAN6H)CjL4qk@G94-dcEABLt@t_j_q0v-|A18CZ0tz&>LC?sUs8whg)0^7Bg6BN)5 zf4^n()rOhssVw00a9C=liD#Z&yZ#s@W9)i*Vqvcq$Y(x_= z_#`aU%lYaSc_tk6Kv9 zM`PwgnrlQ_py~pAhPb>uj!-$7e8B99@(cwWux9k8_O`a>4vhOX{$EVF+FU__UsAF^ z^oN-E`MaMj&9JJbhpb-@NRHmcqD8 zEMk1BV&?Ogc!@KT@5`$(9hrm2fzd)`MDTh4isb7_qrvS)Xs=;{#Cym+wT8n0Ty>q7uxYJT=nBNR`>U#cP=h4CrW?MEHAz25}z28 z87McRVJ`qnQCGbqM5cyyQV-!}jnL|}3nem|#ceHyOYSzXpY+U`fcZe2t%3xLsryKR zm#G>t*(x5`9+r|^u2@oR|0P&a^CK`A*y$^QmOZNxoK~mq9n%p}uqnu#Ct55G;N*9A z)5LWyeCaLd4nv(Dt5$w!_Np_drxdM@Ryo#d31;JTHrZ0RK^j<2q(H)8af7o3`?%EP0`WyvPi5qw7|nqy`pj=K1~;L)D970t zH>#$mNijzeB_-pi>EtgzvL#$eMLqH_yOJOzVpNfjc7%GJ4sWAzzX%GSmCo45-3rT7 zC=R|k5u;Xos^1(T?jv>=2#B?c9Aw%$jsQG|33wy_?i^RzP=!-cmtx6$_T-U z@(rDPad7YEbE!&#Gb$dYQ+3p3MiS_^{sx~;PZ#EE#`QDTbizX89R}@XL_RiBu* z+j-^+2C`e&tj$cdhjdf8RB?us){Ym5<>mw17OFg#Ysv;ss-g2DJO{mY#c3LbG zYBU^3i4qRCb^|UWXc;SKD^o3k6rw!zbzu}iGbRfGsD9%{t`^)pnvfF8(f|xee)}Is zG9`z|%Z|RtS(?>Pvya8Vrn8BbUo1HfDI@?7$IurRDnK z$93EeH1qe3C9Nfh0XN-Yi=rEAU@1V=GJbv#H9{7HUBcUp&3mqu$uZ%wFQe=`u5k9$(l5gc zzr7nSpSO-Fe&!~z+wx{!~2Ng#Q;gg>39H9CX})Q2H}B z|7HV$iXGM~?X9g0RWI1@n=<3VIZY(4s;Wv4pDCqGd@`m9AOdL|)>`v@$WA^M+?tg5 zpovpQ$0rzi#3h6{IB7DfEs&`ELIugRMftkI{%(S4fdnnbI=AZZ=Q3H4U}ZTNJBrSf z|F5gB4vX@Ox&@`BTco5xq?ATF1eBI;Bt#mdLrNMIDe001LAs@+1eES>q#Hr*p5J%B z=RVJ!KU5ePXWsXmefC~^t+h42sL_tQ5|$QqEvMw7QIlZqm&(7@dQNBa;Bea%8=1l~ zKjm4=&-x>48`<@2_6Uy4df!|L}OLj zYQ50L{K06V4biTe8;MmNcbMXaLT2DhKXm?Z=V1DbW)Ygy%#DqWko?_|#Av?x=anMj zK?sr$cVKcN5QqJJhmNj$3DzF)^*#3CY2ErDavNM|Qh>e)fs!GN2eSV|%5ZV*#xH&) zKe@RjF1(JrRZQ-S2{n-f`C)myQ0l-_^23ARccjw86OwTX<}O!M(lp zv7}$1rSM*Cl+?>Ul$7cDaZ8mhuk9B-zQalOt&chc4NMo9kDEEg{57{1jgnO$jD765 z6U^6)0NBe--+nxI=E8S*hbL9@b_;tG{pfzT zaV43#j?1WnDvt)8p7e>KKV>PNlhXh_DCnLtags)qyX_ewGHN)Uq3|H7cVCX;4_XIp z5U^X&LC{pfXI>N`pc-V1<_?>R8%KC2ULzbz=0Pz=pYK{Ec*{o`?-rljf{}b*wwwG4H0wzA&|JKKjeN+(*GiMhT#kiKSb@qz>u5&yx3# zJ!2^~#j>knp+~FZT^b3Aa-BLiR#t!~H5-)#1KY#%B2aPr$l{ouh3OcF5~E}>s@_%DbII^b zcepKDMq=$0ylT8`Lf`TC#pbYJv2tFa%$0}BV$8XE(Wvi|ativ7%bo^5%*dN<1!NXF zvVh&&Vy6GRbIVMAnteFA5jvRxxbY$71dy1#sCWwn_>L1preoSl`;+ScPwMIG`y@+- z;3Tg)aeExTJofbIrgH=DnMoTa?(!qFBjMHfR!FfQfh6GA^9e#J0k@Wckr4!CM)+i8 zU4Y{W0to`~1QP6hz)%yQ<8S}JzyH7fQmRrHG&MJ88~DM* zrh(zvw0a0QSu|gt>hU~!RCn;>o}j}55`qTL%F6nfpTEL(n(yCnp4jguFE`DvhO=L6 zUHOPuuzf^nbW2WIicB)}1Xa#^P)!yrFC3|d1xMVy)K?G6rk4p~yk=ZYcP?C<;|VuQ zZK~+TNbY=MAzYQh{9#f3gMorBxQ>okIKG#%^@Ohejp7)l^W?srzs75ItDzriMcWcl zrRX@9FDY{eN}Xmk{&TMX%JL||uUM_1P)0FXg3`9)yq#}C=9?QNY# zcWz--!*OEeKNR;w(>$2;xfjw}PWQB94pvsf^02WK{Pnr^rz zTYba+GWV#1^JsEGNHVA*<*62`tn!nCQo6`APt#d+-PwNsF=?wR7VGw)6%zd72ou$k zX<}WOv?e8d-~JHY>8gTn{ZcZ&wX&aQYNjhxa75F;OH)&+W*LE8lHlRdckSly9EP`M zoBZvJRL{fAZ|4>3VH7+l`q3Wb<3wWpI&Oiqd8vxyYeYbsee{-(q_=Sdzv-K6anZuN zZK#{vwX=30->6-DcMsY*XI|wlpg$3E39WNpcLIglA&7y#S&y;-! zG+)QP6e`~OJ_!0o5#Z;>>(rNN^$?RZkfnwJExhY{ol5R!CVL*7hpT&bbsSBGoJ^J^ zq;9;kDPK04G-Fac;7}ii9@oUmXpG6yG)|G;n+vZvAr+1Ohva0PstoRXlO0cX3 z0U~BPp$0=4G>)cYwRd(JNv0i~x0WGnz!$5NC%LbTaz_$mPH z;sDxhTbr(ZAz0toOjk$c<}zX3xq}dF2|a9=yD#96XM7P6C_vWmm0;Z|lLbq{?~-|9H6R}$V@ z9MOtl{vuK#use-;s?t{7$jRlFY^cr5a%*99hSGzM_Q%$yRzn>sUlrSO!&X8wnK_~+ z2d~+%L_kujbGeeG%(1XS#})fUnK;USNmaziSngMz+Evd-H@mMlSF*>e$-(n}mkQ>! zvZ%oWIXrS3e7TIz%v(H&g_rHWmsFM6?-^!gWg+NMQX#nJTO$Q(egS)pN4Ow!vh4nF zA9@!~=ldq$gR?PKam0DF~bvxD2u z?U450YuvKgAE6_6fLPY9JG$?%?@Fqx6CnXy59+)R??o@4vRMKJD+TnH_xpsMRzi(L z78N<0q$MS9@z1%Nb(_JS)6#cDot&IRH2l*CnW=^$C4tz`2|+{|`YlafXQFc!svE{D z*FxdWb$U9L3q1xuGugxZF&`YVsys%+QoJ}Qp&NOY&5xBnD3`tGy_w=~rtRh&pLO)u z?0AG|wKTSP5u(FmQ8MwODuSyL+dKm5xM-<*L*H$-q;_gNH%p`u*Q{gMsKTYWEA|3A z*&m(yyF~>z82H)ME~0@PP$};dR6|K{fkrs{YAaOUWp87}o(etu5W#uzO+TflGm~ZQ zmKZvbukCYx^LM(qmDXrV{`0NtNAkDSX3+3=3+~UTFW2n8B(OKkLRFp<^njCtBdV@{ z5qniV;}_PmS`5;4vU5R|3Dk(yJ4_UTj2_*>UQbftGaYzBoGN?6or{C_zz36!#f9lq zXyW*>jRCudwAyV+;de%hl^*g*YpT4jD9Y+(PZb$?sYVGxV`9yKW+%YW}p#IAuW zpu7G;&HLzGJ2yM)MklgxzDA!^vwLr+k=(4=w~7kkoD^{-L+k-DXS*ycEPs^0+2I^( zDx`JB9COBFG9ELgdK_EESv=Z;nJCs=cd{A>s794C*?s)m3Lh?#^-|rl(b*-n+jDFU zvMjqyFX#@=$a_h&_SKGrFGb!5Gn^i|ZbvdTZbCMAm_QZf-+mTxwE7oiOSusmL8k%Z z(s~B$?B5%f1jGhyOZd*FLzACB7#C`zkq`&q_r4%!!C&2$469J#4rrB5)5oAL5~0oK z!Y)>qtCq`HxI=8v%5L9^l3DvzzqaQ+-VEu_CdyileK+AxGDa*N?k}{KO`g5B6Lr2M zEPg5n#Vb!vPP%+lUNUQ})U<_F*0grAz55{Y~+t2t9 z%GrYsmjlB1JgyrJIoaZR2dQ=s+^1YN)B3YG$+K1=BokhYKD46f3)&4;8gE7^I%_S( zyYDutYJd~>%5z!e?&k6wqlmkoHx0$);kEF5)%_gN2s)MI2f=TxQqPlIoo_15LQ-Q z?9?i4!m>!tvN7O#Xa0arnf$=k1NrDj%bnfPY1cGE(yCs{^9zGavHmR|-{kQ2Z!DO7 zSsel>39{sdBY%W`X8hpXd_7HP{*x$#yk zwZ5I+H6IhN6V@gUF(sV-{1PYD`EarWGFhs3=k~{_I_Pg-svgaAjyM_XFb7=CbIdJk zbZO%j2YLJa^6~2v89U`<(0!Y##Jsx{r7ilIy*4E8D>2G&LGHQNqDj(CoRO9sZrsP) zChKa}lx@g;D!<;zPtLQ&DR`PVHq7Ry;vCz|w7t!}Ay|!%;v-7Nyq()#_lVde|Cb}= z(T$aVE>)aRy)=ZdBFV}g9AXvcB2r_J(*y+v%bQ_FNOGy5q{)~2XR35$1hnahFSOKF z{Ji$R@s|1Z2B`}_(9|eC`cf+K#^>V#HT8kk`RpA7jaJ$}e>EI#*8EoaH8NgMwfdJi zvtsrw8K0y2(l>^-Ux$qmsbYk;OADncr6@6nJr_K-n|hk`ByUs~Bb-Y^KyWJ@^`K@M zrzIg?$d>N!PcxRNT6{NccF!j2z*gF@?`36WAL7L?`uaax;lyT#N}!^m2CK{8GgXNs zauJ}k68kKxeV`?ovJf@@=32#BqL`HyWjx_7nu-nefXNY3i(^`+y!ZF;HWlK)tnKMV z2jiM)M*&KKR3&{5GSP&n-Kc5#svU;T<~xCdW4dIjuLdi^1k+PAwl( zDcR_Qb4^xse+(HbBrM%X6R^~vh4(FqIuW?%)&~Vevf zsZuy*zAV9Iy45*&_-CQw1xh%JK_3#-D?b!GDBDYH$b~Uu*BqSF3qZ`E}+*Uc- z`2QJ9ICQ>F<#bJA)0=(ujR8NT_o@HEt)5#fqLlQy(rGjGbT{lZ_`S2%Z;z=AILL5A zq`u+zqC!IRIx1Umg`$V_eb=C=72$Tnwp3=8>Z<^jKZ3IOVeuUUww%H0gU!mB3$IN$ z?&$63yTrncu%?tu<4@&mzWJz{eff)-QLKpDwS2yttrXv4=T* z1*9Per#}(Ud+U22blU#Ihm#)h)zINWYoNz=Ne$#2)0pGSRpW-s0e3izH-2R@>%Rj| zc-sN(Df31ppYcC$i`RYusiWnUO-k+`{#})(3-@Oa$&V3pqp1+Ty?o1B)`wGv6lo$(H4_*v|2Us0MBqTD<&W|9$r`{ebp%)TLg2Iyv^3RrfACQ&n zAt7xS-fLX083d^}!mi}`^XE1bW&R)xiiDOc7o@66*3bNh)v#fEk#ZXT1eK@9ZrwVx z%Mq$jMnS>PAgc`$v74%Vbp<97mcSkXbAmts7izY>Eh;{DMv$S;j!jI2b}b8L?q$M4 zc4+KIjro^cXSID8OkOvzp{();U8S?$`zqX+D z0Rw^WU09l!00tX{6Zya2#;UX>0q~v4|u&H#1`xk^f?munU5CuO+(J(sz{1zxCKzG3d zViw=)6RnIlHqB7czK`Ij4+YaoLLwq($v5ZVZ^AIX5B=WH-~j!0{t|NA+Z*JH*|3f! zSypyUoc;xKyVcQZ-unm# zG)b|gortvxGH0+y06nf5$g)Sq$3LZ{{9Jx7rUaJK!0B9DvmoWr?}irkU4FY1mt9a3 z!J~G!ep|cR<}MO$NFWq(9F6;uBi6i7JbvcbVF&};ZW$1swKT8YMPLzGz$XEA#zD{)7l_5-td6F* z($Q~$?jeY(hV338?o3-4EtUj;CfobIbj>YVh#1N|AEyv1@Ll#f_TT4ZYA>mkD#}BS z@p(~e{ch)}+)}B`uVh3DydN#Gb94dABIeES(BHuE53naIrt-qHOUG3r7|t{7r(6$lHsj?Mdb zEs~Zw7E=7lR5UeZUrDeM4ViKG89rNa4s87%#Xr|wtWyD-l-;NqynZEtQvrv9&3tnz zL?5_UGo|k0dBZ*7Bo7irJa`rt7l%9#rXI4e(83~bY!pGPT-HV#@YVoh18_%f`CzIt z!k@)hUbIQbJptw(%O2nE`S~*kM40V> zC_zAB`(TL|QqrUsO7yewaAgVQsKvS;%??q_{(2k?FgCYSRj$7Y0N2bEYCRVri@%6i5RqKkkxLaQ^xOn>*7u^W-(!DZ! zPa38`X*x~p$JzKnV=pjCf6*CZ(XE^4c^yBs+fSsz<4x~$d%1fSnQmuuD+T;qqOVav zB?ug_-rin7r=(?ME*QCcWHLo;B+|Hxhc`FonuP5e575B3*5p@)1pHtDHEBdJFj$7Z z+BvB*R~LUP`Cl#ojjm?iFv5Gp(D%X|h#_rY68-cUacLN=d}y2hpmLibIBWqdxDQmN zb(^`#N~NjF0qPWw5|fg8@7XuD4t-JF1R^2A2MFF2v;#pcP^Mdw_>2k3$=MkSX=f$# zHzbhR3ZaUf?KdlP$5tKFyVE%ayy*-G-d=aRt`B78GF(W&$Qs_fB9sWg6u$_35sCcA z3Yk2-Iw+H6Nm|hwfj3h2F5_PZXF5cVJ`QEtt0S(7WyO-N*yj3JinXMNVp^NWloR^V z6i;3D?T>{P@9Hjwscqc`N5L|ZBs|Q%(Z5&Uylxk~=u$6IW~||eBvdAh|EV~cs`pmm zi>XQ*EfnW-ZML9v!v}U8oP$C_x`cjk#?;md(9zRh2N~tpzVL7@Q_3@gV-10FRlOen z20F~$rZYqEa|!g5X-EYTRvDO7fYHwVl62nJq_Dxc!08E5?c=kD+Bcn$LZ|??{60h* zr@n_ZPrDE<6lz%*-+|sO4=z@$teY?W!id&l!&~9y4}VGFafAI?OR_vDZCx8uA<#Qd znkRsXa2J5MeIWB1cLp{xE#NvU88Mudm3(yg{Y2zn!E%Mb&Slvf z{RPsk%CJBD22Ul1ooM>e2(bcr_)^&m zTF-)g&&k=Pszc8vNGD8PseUY#GWC3xi)|qMRFgRxPOiY78%47Aqzl7Yl?BaL)BxY? zfsAw?HAWbv!?SW`wbH@wuumisq#^dBZ_RjLY!d*U^>){<-HwYIAz|2E{pgCp%DDKJDD6CHa za6y>+Y3T+DvF-tn>+U5KQna_SG6oOs8HaY9yvpe$bv86~9Ey&9{(1I?XFJmg;1k95 zvKt?~()xf^)0^rx*Mmr07W~mSCM%f1U+I3|C%1=3z?+iCq_HKKpz06A6YU1~9nMY+ z*kY>)VS>oT$|r?eVQ^%I(1(*J^aa~pXIt5X1T(xN@OyIFI{G(A;JX2h0-m{JD9Bs82(#ZErfFJ2FKb(J@1 zAg_7#$nL9_kR`yzTy9jbNdPm3R#FxNsmw>XbG-z?*(n|DT+*)6L|7vU=Mhcf2X2%I zbZ(?$L3J~K=mY?|9K(bT0x9Jg-3S*P`7p`fc65s42)QDV+~AV8+3*dQ=<$OC(gm2B z^+B)zk9iXS-QeB=Y+g2LgIM|y)8YDj2AgQoh|WQ4cEjN=3Z~N9+C+rq7r^mQ#AVC9 zXQHQH4r&&|@W2GsFo=hfK=JFaQ#GD7O08#V3&9^Kvfx*8HHPjg44Y>DDQWk>LTr@y z(9FzF5I}Z-;U+%KSNYpj{@So@(0o9jn<;shVjbOzD}K}GI!n}8EV;&AcWJXr^+bSCXlf{|Bx4~Kc{sRdrh z+9W-NT?gD4wsxNDV%w$l@A7k9Io>f1wld>8K%i?VEIL{= zlLrxH2QYMZGpRXi*C)#-Z4yPv-#2eDx6++AkVT8;77+TntA?W6l-~+BE8fLS7q2Mq zQcV@_6CR6u|CJ&UgO29zip@Rq`-uYBYliW9gwx+x-X-<*VO~)_qYQUGAYeDbbsmTI zS#0%%w`itbO1#Or(n|S5x_{MKyvq93ue0;V8Rh%@xikIk#>5wyYp!~N(-WyU23}iR zy93sY%s{{_W?A;;a9dTMbb7(2UUOQ?7;w;F9=>u!{;2iHD0mRvE*-1O2gkjpNulE% zdJuW5@R_9cYivUFYAiaHcmj4^A>&wl^#N9_*p;_jUFo_v-|3Tw_qC!V z&m^(ju!pyQM~N3#y<2OfM=DL5^E7tw_IN5rYlq>&H~l}zzNX4o?0EM-=xyA3_|u7- z#fa=&M--2Vr_-~$B~Y@3cgEBU-{w;Qn zu|KCBbjc*XlRv(ViD!b0y@nS5zSN<<6WNuqwb_})pS(AQh0M)=cilL?)i_@2;vh39 z^Xkg9Y31nC^*>vk>sy`aGpi4<#4nyw9iI5_E`DDX=f3;w{95ztpn9<8oR*T;$B?qL z?gPl^uv*O92=qHRzG98m9H|K3%NSghT>3s0a;4weU+CZ(V$flDME>d}zRx}Sz)($c zt9~_7nc%~>wqmX9PEH@0$X+{joRV}#k8j7VnPvsfV6k#CCt}3jxcXi^Nr~w%I-)EqfB* z0{;g%>3S#!sT_E;vIid8X0nI)bF3QwMUA*oFYOw>)A_s@uKcfH_a?&`Lx=j-;)Ew7 zdOU%5+Blgwy(xKrIR96^bs+cVeGmFjasS@AOI`^dj>Yp>PW0qkHR#h~Wq+do;bz9j zblCcLbsKR=#xaU%E*{Gf1R^e^LC{D^m~yZzj!@OUvD;RI>c|d{Q+t=mur#Q;Fvd5d z3H@57jg5IiO;JVOP%5HODNY1WQQO=Q5d`~ZJ#?7UybiQgFRiFRm%(O(4!8?}nrk5$ z9k!v39SJ)6V77oYJ8sDBxN*f=S$cES2=%gNN^f#JXN{-(e&b{>IUzP7_=~ z_J4mL`A~o>iUL=sN@IHD@mXTz+~Nm9+>RXlI(%#w)YnzIoml7hX!mPg_`VJvko@0| zz=E-3M}o_5r2z>!gJa(CW^^ylwx2x2Vpl9%=puwU`*NCN^xZ|Re_tA zdFR9X#0*V;rQ0Uwzmocq+7e5?ahMTnl?AkI0*JHzCBbkBPFCO?rswCgysB+{vpq&Y zMTLl@-1fXI!Uk5p@9&zY(P^JE>xb zcZm2%s+u(t^cI9bd$JX-4jy>lNwoA4j)y~x>*^cc-gf-vgJO!Ujp+M=sd)w-SeAT- z$#K_i^PR0)Mw=r?-NN)^1wQ1DMI&`-K&e|X83}AdK$Iuj4zW#8gDWthR=&BOzu~r> zdYr4AJ^f-8xrssSeWQd+7cR9a9F2KJPD-eNI zdiCj3dn~JZ&P{InVn$(Mxc_Z*@Hh>7|DKtHBN{wjkpQGbIL$%Yp9xJEiESNq^>)bG z5pzb6zzM?wOh(`^;^E=pqKK-U-CcgYv7DjUu`t) zB|l0}Jo?xAe78KRb|(#&buYnh&tfmU5tp^dWE$_vyK{8{3#+@yjBm6kNa>9t*~6FW zXDBVN_MY=Ey|P~Vt{5SB*kUgkzge#HJF!1wH&L-VyKnm`uFpPALBA4d`tFUd zB1dt2Y%J1+!f(p)=d!mUjbRAU^Yh>KGnu{-Lo#<*lWxfSy-xT0V&~25Jy<4f`2Jmv zw;%u!uwix{ag0G#!SSqm&lNSusVeP)`Cv>uxB{fgh%{3U#+}f3?;`_$;?KnIOQTsB z*y1+(hRnYCf(guLS5`3xbAi!8L`^*apjbQPE82BVj2sC?{m%VqPm=%qv4LLBXD*X~ zN^mksgH-W{?;u(Jn_=%fV}Kl#t2A1J~gD_Q^NTAtklZ2+^#C;Z2-wckt#W-O z2?=EAV6q^_|G+v~g92p@APIi3Q_BV#IINHC(RZb;FyiWgR@znIh;V@O(0<@lJ=-=-%PTnei=` z>y~4a{#+_J6MMRKjpwxRrE}v`1JO;_D z&r_6=e6NGg#SDkF(LYBZ?GRdYwWcn`hz9q z#hQTW9gESz7v86nmNEVtxyg1h)kdD1UvhGCkhqM$BSE1Kmxl@VDS$(nfHHJ;`LrcYtul!}j+yrQnFmIR@)vZ*wDjaMI zLG$LT@xhV>ms;d06ms(NCG83qjiOFsgO;0}H;bDSK*r9o`6KsdAu!8c@qGLo&x7f} zTr~NFWUQSJ$w{nly=&YV5llp;uSqoLYAOB_2(JpWdEDRO6>ajs*(S3=yoS5wpTCba zAIq;kY&sVc`E<^cK7YzvO>vJpFT|c^R(yB;!rNgKD{bc=*0j+yrs%|Bn`_#0-{4e5 zKl8~w(Iv#Ym=E0EuWuT%{|0uMfC5g~5mhzShUWh^a~K~t`SY3S35$gLcOkY1T)BCQ z+ak}S1d56ZbSjcct{+YC?pU`@tsJQ~ZK+qAr#{fezejO3uq>b=yPGmSk&@P%yNgN8 zc`i3i^14VQ{eAsj3;p^bW{i1(N#B~8uU2}y#A?Hh>0eZ-iIFG%*UmSQ<91!^uIh2u z1i~EDJ!{7r;Wykg%Fd5O^FC!UQ|DQnko~E*U`rlWXEiz$I`^h@f5n~bb&_#7>vzz% zB5$*mCcZeozUbU=Fl9^We!*CMI%xd*2AeIuIe2jAhq{sSKc6#|3JYH0uJ`8fee1E} zAL}kLe)CUkcG6oHq=eNF+3sNaUnI$ zi1NDmJmrvoKI5F`Xc9hUvz~pM&k6?8E`1g8lT!@6zm|v?Y?NmhR+8~{i?f;5^N)Zj zM>+-tPP{~*%BxEEWD2S3)X==TyIQt5mn*wn#esu6x!yh7HcHB0_CJPPOQKC(J+$HT z=HOrRy)I9P$A999%{D2867&~g78Pxc_iBTKq~wz+s>XQ~0vG|z<@=*S5h+(!R}}&V zs6wx#lR~F=;)^$!0}Q{ekLlU3Li}am=T88;&G%4Ie)v1R;|iXgZ2&0Nt|h%r1mFg+ z;+FvP08|48=)GAo5!%h(f&jS)gY*orHgFVe2Q#nkhcz>8m9K^o-kI8E#>k5Cm2(kp zyEF3E)`jVINcRUEdSV!_HkJJlZ6W64C)0he;>6Vq44%u#1g|_w7@nCy%wz&s4h%pM z;S>%KAgy#-RH(jqfe@Ru!Q8otMjiLihFQBgue~Q|c+@|Y#jd5{mj<7lQ6gqi?YJI6 zAb0NP9p8WNch$ZZ;JH_-5XMw})9S+tnBTJB|g%P|g%)nPe% z7k#d=8J4JSNo#+x_l%B?F@;Le*J3bS|J_`CaQ5#WJkCAiwqdioZ|1q0eO&1KLrNIZ z)4PpM`_~$}__$Vb{W~mvJY9_|=FAqViNE(xm@0j|iyyBf+v0|R5Uq1q-`u<_S?tk4 z@PWHNwQJ+WBaYO<)*1QRO@r^BR$8<3FQ`*%b&vny}iE@ALdu;ervvZ7Z5_zX5fbM zTsp{QCiCn@>dy-6vCrxot1kPM(xN*$X$_^(Qhj0>^D#ACIj1(`XUBE3l+!}ET; z|Lwc~`lwS@(OGqlA19S@B{})htq!zMzA#GfqWZQoBAZzx=G3lh!@-3&rGUd*FrDY9TOrJNgF*ukJ!D0j0Ew-|+g#DhMeoDm z`3VjTprKBm%xD&k0`C&e25jI}=9iQ}i;4u_6pifvwO&@HND0iy*MELqUN^M+{~@~= zY4K1KN0K5Evk%ev|iytxVQ-BSc-8}J_bI<5#d5aasvwN7vZ!U>H8lGa2> z?|ivCQwLhznAFt%Py%{#VON`95xE%|Z!0S+UGKDl)$bt~>Q)%H-fF2ud0iFNb`!^S zdZ6kn`D^+3!(SOuGO@=2-5L@fI!@kax-26jS>K6v_*W9xlQ?ouF7Wo(;XqM+cNM{V zsoJk?5>0jcoONce4%46fxnM}Jry=MFb88z4 zPUNfV2~rq8oQ|iFHsj0YqqrVWKlu7Z0GC?)%c$wy6q&90U733%!4Lh!*ixfMy!PbC z$U^>xlxz?Y=9t<3J>tqeu};807EIOns`GsCFZK6dQnmM!9{p8qF@LlMQwjeh%*M7< zp+t2`wnc77>rlUi<0dEB?*7_gm^%fWo?f=-|&_B zB1toUNkzH38sMc}@~UD7i83xuuF5E1Xya21#`b8$k95}zWd+&ULlpwdQ@u*`Cc{DK zkRXlxQxp1~ufCmLjI(IZxZx zK>l|Zj3B`c;~Gje7B@O11N>Dt* z$VA_5VCp-c?o6+*7dAsL<|@csZphqJr9{*Dw+tD#<5I^5i4V|cSG&=r)t&-1b01Wn z&td;U&i_fn%g&CYr>BS9oZmWcSYB0?K+DL7mo~HyQvEZL{qMKsQehqhOAh|=g*Tv! zk9@DrUHw{$O6$WbD<6ygJ2!(tqzs>{Y^(U%vardsuW48YWSOgVg;gI);?q!GmB*}P z%GV|tOuU~EJWG0}BHz}7c+B)^o*U`FFGUvYp(zayFiG~}9sg+z~U0 zb%)z!k0Z6qP&c5!$WQEG4F*8C_QvHrx$6GC10|;W7=D}QY3vlwRpU``lqgO05?%fC z^I7g`6co3nhU)mT_#1Lj8XU2m54}f%sS{XtrlSgTMP3s@$x** zIF2#H-~+;G!fRC8I#R=F2zyiMy+S1N;YGf|Uokq)MtnCZsbpK`N+Z@E&I1yori-tO zaOqlm33`PtYpn3V6cK?EfL#9~5qT2;Lm9wV{QgeQOWNTvdctsr9N+6(fDv1O_w@Zf z8!M{}SdBsP39E2t<2ei{oNkP{1D$|6d&M3MAr(xGLS~F!LecBn2aeWwg}k6F@)>DP zl}`w5g;~pvqc61N#Uxq4WRdm31DFUK0CaVH-_75)eFVE?{?c9=0Rm{1J zIUlwf=q=luKPGpGO;|20m8D4+U;TU2x_)3P#2g6K>hG>j`FLqB6XcKdoHiwTj@*#? z1_=lp2n|`4kq}e9p?DYg4hae^ItOD|I~KxKn!jEw3AmDw#nf{1yF; zCySGW{jY>ygey3vw1YX%R}2Y|--2Ck6)TF2Was8!67P1-K#Px8*GaJho7MXT5rTSY zY#_Mo>`ZY2;|1s}j;nE6OD;m6A^8T(LF(%`NO?W}U95Yoe3T;>bYg%xIQXVMX0EWjBPrh&g#cXG3r8^x`~ zjgGuy6!(0X&lbN~{vaTwlHG|`Xv@NhaWCpAVyxH7VHh!e)UfF2p_B4YNVSRXbG;4E z?4`8h+{3{0rGXo#9Py0@ua+Vbc&se^3SDWK{^?6F)Fl}_rm4QHD}KauvR2eEe%MK6 z^a!435_zK3t9I%xqQ+dy908S($DX0-OC6B=dp6=W5HFMblY{Mmxs6dj;4xN=DqMj#0>luiWm>uRCB~G{N!}#ZkJF)B>bSVqkR*Xhg1o-I`l<9Uj5x;+~ahM;aV0NA`_80Uts@v8|~>jw~MmL zcRx|uV#}oTF9X9Pp^$+XMADLv$`Z|TG)2y|{A|@RRN8uS_Iug>?A?`UQuoss`{v-L z3cDXK)TRF9%n$!9$Ya#1SzbV{TqGDeEO*d|&5jC>2}+nTx9#c8x=O8?kl5Ceb zeU3>^Nc3A;Hpb zqEPhm!!hceYj#&lI_O9u;CX0%X4xutzjDWWp`voW<8*ma>qQAFqcqPgR#0T!@hW-7ax&=AQZu&gvkbO-)> zEUpM#pu}7#*rdP@BOYy^!!<>l4ZXrdPB{?$6Re#D>0JQx0nQKO<5BzQiuh+9)+#kL zZ5#>(%TWm7^ZoY-uDHeMFa5u-%O6Pxr11ZF__km9r9A&@n5%so83`WpGD^~=lEwl5 E2Wl^^NdN!< literal 0 HcmV?d00001 diff --git a/cms/articles/1473861890/templates/article-1473861890.html b/cms/articles/1473861890/templates/article-1473861890.html index 0c3e620..b4d44e8 100644 --- a/cms/articles/1473861890/templates/article-1473861890.html +++ b/cms/articles/1473861890/templates/article-1473861890.html @@ -69,26 +69,30 @@

We'll detail each lifecycle hook and find out how we should work with them


ngOnChanges

-

This hook method executes before ngOnInit and when a data-bound input property value changes.

-

The method receives a object of current and previous values, I call it is changeRecord

+

This hook method executes before ngOnInit and when a data-bound input property value changes.

+

The method receives a object of current and previous values, I call it is changeRecord


-

For example, I have a component as below

+

For example, I have ngOnChangesComponent as below


- my-app.component.js - Full Code - + {{ngOnChanges.sourceCode.exampleComponent.name}} + Full Code +
-

There're 2 binding, type is a primitive value, model is an object

-

If I change value of type, ngOnChanges will be fired and we'll receive a changeRecord only contains current and previous values of type.

-

At this point, we have a chance to do something which relate to changed type such as set or remove a class from our component by using Renderer


-

Notice that, the value of model property is the reference to the object. Angular doesn't care if any its property's value changed.

-

It means that the model object reference didn't change so Angular doesn't fire ngOnChanges

+

There're 2 binding, title is a primitive value, model is an object

+

Because I bound data to childComponent so after its constructor executed, its ngOnChanges will be fired.

+

3 seconds later, its ngOnChanges fires one more time because I've changed data-bound property values

+

As you see the below image, although ngOnChanges fires twice, but its changeRecord is not same.

+

In the second changes, changeRecord only contains current and previous values of title

+

The value of model property is the reference to the object. Angular doesn't care if any its property's value changed.

+

If you really want Angular to fire ngOnChanges for every changes of model. Immutable will be a solution for you

+
+

ngOnInit

-

This hook method executes after the first ngOnChanges

+

This hook method executes after the first ngOnChanges

We turn to ngOnInit for 2 reasons

- To perform complex initializations shortly after construction

- To set up the component after Angular sets the input properties

@@ -97,9 +101,32 @@

ngOnInit

If you fetch data with params which base on values of input properties, make sure you will get errors.

The constructor should do no more than set the initial local variables to simple values.


+

Look at the example with childComponent

+
+ + {{ngOnInit.sourceCode.childComponent.name}} + Full Code + + +
+
+

And this is a screen capture for result

+
+
+

ngDoCheck

It is called with enormous frequency, Angular fires it after every change detection cycle no matter where the change occurred

-

Look at below sample, when you type something into textbox ngDoCheck will be called. Even, you just foucus on textbox, it's also called.

+

Look at below sample, when you type something into textbox ngDoCheck will be called.

+

Even, you move out of textbox, it's also called.

+
+ + {{ngDoCheck.sourceCode.childComponent.name}} + Full Code + + +
+
+

Clearly, if you decide to implement your logic in there, make sure implementation must be very lightweight or the user experience may suffer


@@ -110,7 +137,29 @@

ngAfterContent

The hooks take action based on changing values in a content child which we can only reach by querying for it via ContentChild

The ngAfterContent hooks concern ContentChildren, the child components that Angular projected into the component


-

Using ng-content is a way to import Html from outside the component and insert content into component's template in a designated spot

+

Using ng-content is a way to import Html from outside the component and insert content into component's template in a designated spot

+
+

I have an exemple with childComponent which use ng-content like this

+
+ + {{ngAfterContent.sourceCode.childComponent.name}} + Full Code + + +
+
+

In exampleComponent I've' projected titleComponent and itemComponent into childComponent like this

+
+ + {{ngAfterContent.sourceCode.exampleComponent.name}} + Full Code + + +
+
+

So you can see result in the below image, I've queried instances of titleComponent & itemComponent

+
+

Notice that, Angular completes composition of the projected content before finishing the composition of this component's view.

We still have a window of opportunity to modify that view.

@@ -121,7 +170,18 @@

ngAfterView

The hooks take action based on changing values within the child view which we can only reach by querying for the child view via ViewChild

The AfterView hooks concern ViewChildren, the child components whose element tags appear within the component's template.


-

Do you see I used setTimeout() in sample ?

+

Have a look at exampleComponent & the result below

+
+ + {{ngAfterView.sourceCode.exampleComponent.name}} + Full Code + + +
+
+
+
+

Do you see I used setTimeout() in the example ?

If you try to update component's data-bound property immediately instead of using setTimeout, Angular throws an error.


Notice that we must adhere to Angular's unidirectional data flow rule which says that we may not update the view after it has been composed.

From 66e06af3b12936410c5cf5afb5ab3aa4415df8f5 Mon Sep 17 00:00:00 2001 From: Minh Van Date: Fri, 23 Sep 2016 23:34:40 +0700 Subject: [PATCH 4/9] Updated article 1473861890 --- .../_article-1473861890.component.js | 144 +++++++++--------- .../article-1473861890.component.js | 144 +++++++++--------- 2 files changed, 146 insertions(+), 142 deletions(-) diff --git a/cms/articles/1473861890/_article-1473861890.component.js b/cms/articles/1473861890/_article-1473861890.component.js index fc44207..460915b 100644 --- a/cms/articles/1473861890/_article-1473861890.component.js +++ b/cms/articles/1473861890/_article-1473861890.component.js @@ -20,88 +20,90 @@ function _article1473861890Component(){ this.id = 1473861890; this.sanitizer = sanitizer; this.articleService = articleService; + } + ]; - this.ngOnChanges = { - sourceCode: { - exampleComponent: { - name: 'example.component.js', - link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-on-changes/example.component.js') - } - }, - screenCaptures: { - 1: resourceUtils.getImg('ngOnChanges-example-1473861890.png') - }, - codeBlocks: { - 1: this.getCodeBlock('ng-on-changes.html') + this.ngOnInit = function() { + this.ngOnChanges = { + sourceCode: { + exampleComponent: { + name: 'example.component.js', + link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-on-changes/example.component.js') } - }; + }, + screenCaptures: { + 1: resourceUtils.getImg('ngOnChanges-example-1473861890.png') + }, + codeBlocks: { + 1: this.getCodeBlock('ng-on-changes.html') + } + }; - this.ngOnInit = { - sourceCode: { - childComponent: { - name: 'child.component.js', - link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-on-init/child.component.js') - } - }, - screenCaptures: { - 1: resourceUtils.getImg('ngOnInit-example-1473861890.png') - }, - codeBlocks: { - 1: this.getCodeBlock('ng-on-init.html') + this.ngOnInit = { + sourceCode: { + childComponent: { + name: 'child.component.js', + link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-on-init/child.component.js') } - }; + }, + screenCaptures: { + 1: resourceUtils.getImg('ngOnInit-example-1473861890.png') + }, + codeBlocks: { + 1: this.getCodeBlock('ng-on-init.html') + } + }; - this.ngDoCheck = { - sourceCode: { - childComponent: { - name: 'child.component.js', - link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-do-check/child.component.js') - } - }, - screenCaptures: { - 1: resourceUtils.getImg('ngDoCheck-example-1473861890.png') - }, - codeBlocks: { - 1: this.getCodeBlock('ng-do-check.html') + this.ngDoCheck = { + sourceCode: { + childComponent: { + name: 'child.component.js', + link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-do-check/child.component.js') } - }; + }, + screenCaptures: { + 1: resourceUtils.getImg('ngDoCheck-example-1473861890.png') + }, + codeBlocks: { + 1: this.getCodeBlock('ng-do-check.html') + } + }; - this.ngAfterContent = { - sourceCode: { - childComponent: { - name: 'child.component.js', - link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-after-content/child.component.js') - }, - exampleComponent: { - name: 'example.component.js', - link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-after-content/example.component.js') - } - }, - screenCaptures: { - 1: resourceUtils.getImg('ngAfterContent-example-1473861890.png') + this.ngAfterContent = { + sourceCode: { + childComponent: { + name: 'child.component.js', + link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-after-content/child.component.js') }, - codeBlocks: { - 1: this.getCodeBlock('ng-after-content-1.html'), - 2: this.getCodeBlock('ng-after-content-2.html') + exampleComponent: { + name: 'example.component.js', + link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-after-content/example.component.js') } - }; + }, + screenCaptures: { + 1: resourceUtils.getImg('ngAfterContent-example-1473861890.png') + }, + codeBlocks: { + 1: this.getCodeBlock('ng-after-content-1.html'), + 2: this.getCodeBlock('ng-after-content-2.html') + } + }; - this.ngAfterView = { - sourceCode: { - exampleComponent: { - name: 'example.component.js', - link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-after-view/example.component.js') - } - }, - screenCaptures: { - 1: resourceUtils.getImg('ngAfterView-example-1473861890.png') - }, - codeBlocks: { - 1: this.getCodeBlock('ng-after-view.html') + this.ngAfterView = { + sourceCode: { + exampleComponent: { + name: 'example.component.js', + link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-after-view/example.component.js') } - }; - } - ]; + }, + screenCaptures: { + 1: resourceUtils.getImg('ngAfterView-example-1473861890.png') + }, + codeBlocks: { + 1: this.getCodeBlock('ng-after-view.html') + } + }; + }; this.getCodeBlock = function(fileName) { var _codeBlock = this.articleService.getCodeBlock(this.id, fileName); diff --git a/cms/articles/1473861890/article-1473861890.component.js b/cms/articles/1473861890/article-1473861890.component.js index 58d36c7..a5c400e 100644 --- a/cms/articles/1473861890/article-1473861890.component.js +++ b/cms/articles/1473861890/article-1473861890.component.js @@ -20,88 +20,90 @@ function _article1473861890Component(){ this.id = 1473861890; this.sanitizer = sanitizer; this.articleService = articleService; + } + ]; - this.ngOnChanges = { - sourceCode: { - exampleComponent: { - name: 'example.component.js', - link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-on-changes/example.component.js') - } - }, - screenCaptures: { - 1: resourceUtils.getImg('ngOnChanges-example-1473861890.png') - }, - codeBlocks: { - 1: this.getCodeBlock('ng-on-changes.html') + this.ngOnInit = function() { + this.ngOnChanges = { + sourceCode: { + exampleComponent: { + name: 'example.component.js', + link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-on-changes/example.component.js') } - }; + }, + screenCaptures: { + 1: resourceUtils.getImg('ngOnChanges-example-1473861890.png') + }, + codeBlocks: { + 1: this.getCodeBlock('ng-on-changes.html') + } + }; - this.ngOnInit = { - sourceCode: { - childComponent: { - name: 'child.component.js', - link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-on-init/child.component.js') - } - }, - screenCaptures: { - 1: resourceUtils.getImg('ngOnInit-example-1473861890.png') - }, - codeBlocks: { - 1: this.getCodeBlock('ng-on-init.html') + this.ngOnInit = { + sourceCode: { + childComponent: { + name: 'child.component.js', + link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-on-init/child.component.js') } - }; + }, + screenCaptures: { + 1: resourceUtils.getImg('ngOnInit-example-1473861890.png') + }, + codeBlocks: { + 1: this.getCodeBlock('ng-on-init.html') + } + }; - this.ngDoCheck = { - sourceCode: { - childComponent: { - name: 'child.component.js', - link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-do-check/child.component.js') - } - }, - screenCaptures: { - 1: resourceUtils.getImg('ngDoCheck-example-1473861890.png') - }, - codeBlocks: { - 1: this.getCodeBlock('ng-do-check.html') + this.ngDoCheck = { + sourceCode: { + childComponent: { + name: 'child.component.js', + link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-do-check/child.component.js') } - }; + }, + screenCaptures: { + 1: resourceUtils.getImg('ngDoCheck-example-1473861890.png') + }, + codeBlocks: { + 1: this.getCodeBlock('ng-do-check.html') + } + }; - this.ngAfterContent = { - sourceCode: { - childComponent: { - name: 'child.component.js', - link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-after-content/child.component.js') - }, - exampleComponent: { - name: 'example.component.js', - link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-after-content/example.component.js') - } - }, - screenCaptures: { - 1: resourceUtils.getImg('ngAfterContent-example-1473861890.png') + this.ngAfterContent = { + sourceCode: { + childComponent: { + name: 'child.component.js', + link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-after-content/child.component.js') }, - codeBlocks: { - 1: this.getCodeBlock('ng-after-content-1.html'), - 2: this.getCodeBlock('ng-after-content-2.html') + exampleComponent: { + name: 'example.component.js', + link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-after-content/example.component.js') } - }; + }, + screenCaptures: { + 1: resourceUtils.getImg('ngAfterContent-example-1473861890.png') + }, + codeBlocks: { + 1: this.getCodeBlock('ng-after-content-1.html'), + 2: this.getCodeBlock('ng-after-content-2.html') + } + }; - this.ngAfterView = { - sourceCode: { - exampleComponent: { - name: 'example.component.js', - link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-after-view/example.component.js') - } - }, - screenCaptures: { - 1: resourceUtils.getImg('ngAfterView-example-1473861890.png') - }, - codeBlocks: { - 1: this.getCodeBlock('ng-after-view.html') + this.ngAfterView = { + sourceCode: { + exampleComponent: { + name: 'example.component.js', + link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-after-view/example.component.js') } - }; - } - ]; + }, + screenCaptures: { + 1: resourceUtils.getImg('ngAfterView-example-1473861890.png') + }, + codeBlocks: { + 1: this.getCodeBlock('ng-after-view.html') + } + }; + }; this.getCodeBlock = function(fileName) { var _codeBlock = this.articleService.getCodeBlock(this.id, fileName); From 72e34747f6a32d78532e5c992345d737562c17d5 Mon Sep 17 00:00:00 2001 From: Minh Van Date: Sat, 8 Oct 2016 00:01:49 +0700 Subject: [PATCH 5/9] Changed to use syntax ngCore.Component().Class() --- .../_article-1473861890.component.js | 73 ++++++++++++------- .../article-1473861890.component.js | 73 ++++++++++++------- .../templates/article-1473861890.html | 30 +++++--- 3 files changed, 112 insertions(+), 64 deletions(-) diff --git a/cms/articles/1473861890/_article-1473861890.component.js b/cms/articles/1473861890/_article-1473861890.component.js index 460915b..ecfb330 100644 --- a/cms/articles/1473861890/_article-1473861890.component.js +++ b/cms/articles/1473861890/_article-1473861890.component.js @@ -2,28 +2,61 @@ import * as ngCore from '@angular/core'; import { DomSanitizationService } from '@angular/platform-browser'; import highlight from 'highlight.js'; -import { NGX_GRID_DIRECTIVES } from 'ngx-bootstrap/components'; + import { NGX_GRID_DIRECTIVES } from 'ngx-bootstrap/components'; import { CODE_PANEL_DIRECTIVES, - HIGHLIGHT_DIRECTIVES + HIGHLIGHT_DIRECTIVES, + TABLE_CONTENT_DIRECTIVES, + TABLE_CONTENT_PROVIDERS, + tableContentService, } from 'xblog-cores/components'; import { resourceUtils } from 'xblog-cores/utils'; import { cmsArticleService } from '../../cores/services'; -function _article1473861890Component(){ - this.constructor = [ + +export var article1473861890Component = ngCore.Component({ + selector: 'article', + templateUrl: './templates/article-1473861890.html', + styleUrls: ['./styles/article-1473861890.scss'], + directives: [ + NGX_GRID_DIRECTIVES, + CODE_PANEL_DIRECTIVES, + HIGHLIGHT_DIRECTIVES, + TABLE_CONTENT_DIRECTIVES + ], + providers: [ TABLE_CONTENT_PROVIDERS ], + host: { + '[class.xblog-article-1473861890]': 'true' + } +}) +.Class({ + constructor: [ DomSanitizationService, cmsArticleService, + tableContentService, - function article1473861890Component(sanitizer, articleService){ + function (sanitizer, articleService, tableContentService){ this.id = 1473861890; this.sanitizer = sanitizer; this.articleService = articleService; + this.tableContentService = tableContentService; } - ]; + ], + + ngOnInit: function() { + this.tableContents = this.tableContentService + .getBuilder() + .addHeadings([ + { id: 'ngOnChanges', name: 'ngOnChanges' }, + { id: 'ngOnInit', name: 'ngOnInit' }, + { id: 'ngDoCheck', name: 'ngDoCheck' }, + { id: 'ngAfterContent', name: 'ngAfterContent' }, + { id: 'ngAfterView', name: 'ngAfterView' }, + { id: 'ngOnDestroy', name: 'ngOnDestroy' } + ]) + .build(); - this.ngOnInit = function() { this.ngOnChanges = { sourceCode: { exampleComponent: { @@ -103,26 +136,14 @@ function _article1473861890Component(){ 1: this.getCodeBlock('ng-after-view.html') } }; - }; + }, + + getCodeBlock: function(fileName, lang) { + var _langs = lang ? [ lang ] : ['javascript', 'html', 'css']; - this.getCodeBlock = function(fileName) { var _codeBlock = this.articleService.getCodeBlock(this.id, fileName); - _codeBlock = highlight.highlightAuto(_codeBlock, ['javascript']).value; - return this.sanitizer.bypassSecurityTrustHtml(_codeBlock); - }; -} + _codeBlock = highlight.highlightAuto(_codeBlock, _langs).value; -export var article1473861890Component = ngCore.Component({ - selector: 'article', - templateUrl: './templates/article-1473861890.html', - styleUrls: ['./styles/article-1473861890.scss'], - directives: [ - NGX_GRID_DIRECTIVES, - CODE_PANEL_DIRECTIVES, - HIGHLIGHT_DIRECTIVES - ], - host: { - '[class.xblog-article-1473861890]': 'true' + return this.sanitizer.bypassSecurityTrustHtml(_codeBlock); } -}) -.Class(new _article1473861890Component()); +}); diff --git a/cms/articles/1473861890/article-1473861890.component.js b/cms/articles/1473861890/article-1473861890.component.js index a5c400e..04da157 100644 --- a/cms/articles/1473861890/article-1473861890.component.js +++ b/cms/articles/1473861890/article-1473861890.component.js @@ -2,28 +2,61 @@ import * as ngCore from '@angular/core'; import { DomSanitizationService } from '@angular/platform-browser'; import highlight from 'highlight.js'; -import { NGX_GRID_DIRECTIVES } from 'ngx-bootstrap/components'; + import { NGX_GRID_DIRECTIVES } from 'ngx-bootstrap/components'; import { CODE_PANEL_DIRECTIVES, - HIGHLIGHT_DIRECTIVES + HIGHLIGHT_DIRECTIVES, + TABLE_CONTENT_DIRECTIVES, + TABLE_CONTENT_PROVIDERS, + tableContentService, } from 'xblog-cores/components'; import { resourceUtils } from 'xblog-cores/utils'; import { cmsArticleService } from '../../cores/services'; -function _article1473861890Component(){ - this.constructor = [ + +export var article1473861890Component = ngCore.Component({ + selector: 'article', + template: "

In previous articles, you've alreadry gotten knowledges about directives/components.

Go on with a subject relate to them, I'll show you their lifecycle.


A component has a lifecycle managed by Angular itself.

Angular offers component lifecycle hooks that give us the ability to act when they occur.

No directive or component will implement all of them and some of the hooks only make sense for components.


After component's constructor is called to create an instance, Angular calls its lifecycle hook methods in following sequence.

Angular only calls a hook method if it is defined.


ngOnChangesBefore ngOnInit and when a data-bound input property value changes.ngOnInitAfter the first ngOnChanges.ngDoCheckDuring every Angular change detection cycle.ngAfterContentInitAfter projecting content into the component.ngAfterContentCheckedAfter every check of projected component content.ngAfterViewInitAfter initializing the component's views and child views.ngAfterViewCheckedAfter every check of the component's views and child views.ngOnDestroyJust before Angular destroys the directive/component.

We'll detail each lifecycle hook and find out how we should work with them


Table of Contents

ngOnChanges

This hook method executes before ngOnInit and when a data-bound input property value changes.

The method receives a object of current and previous values, I call it is changeRecord


For example, I have ngOnChangesComponent as below


{{ngOnChanges.sourceCode.exampleComponent.name}}Full Code

There're 2 binding, title is a primitive value, model is an object

Because I bound data to childComponent so after its constructor executed, its ngOnChanges will be fired.

3 seconds later, its ngOnChanges fires one more time because I've changed data-bound property values

As you see the below image, although ngOnChanges fires twice, but its changeRecord is not same.

In the second changes, changeRecord only contains current and previous values of title

The value of model property is the reference to the object. Angular doesn't care if any its property's value changed.

If you really want Angular to fire ngOnChanges for every changes of model. Immutable will be a solution for you



ngOnInit

This hook method executes after the first ngOnChanges

We turn to ngOnInit for 2 reasons

- To perform complex initializations shortly after construction

- To set up the component after Angular sets the input properties


Why shouldn't we fetch data from server in the constructor ? Because data-bound input properties only are set after construction.

If you fetch data with params which base on values of input properties, make sure you will get errors.

The constructor should do no more than set the initial local variables to simple values.


Look at the example with childComponent


{{ngOnInit.sourceCode.childComponent.name}}Full Code

And this is a screen capture for result



ngDoCheck

It is called with enormous frequency, Angular fires it after every change detection cycle no matter where the change occurred

Look at below sample, when you type something into textbox ngDoCheck will be called.

Even, you move out of textbox, it's also called.


{{ngDoCheck.sourceCode.childComponent.name}}Full Code


Clearly, if you decide to implement your logic in there, make sure implementation must be very lightweight or the user experience may suffer


ngAfterContent

The ngAfterContentInit and ngAfterContentChecked hooks that Angular calls after Angular projects external content into the component.

Angular calls both ngAfterContent hooks before calling either of the ngAfterView hooks.


The hooks take action based on changing values in a content child which we can only reach by querying for it via ContentChild

The ngAfterContent hooks concern ContentChildren, the child components that Angular projected into the component


Using ng-content is a way to import Html from outside the component and insert content into component's template in a designated spot


I have an exemple with childComponent which use ng-content like this


{{ngAfterContent.sourceCode.childComponent.name}}Full Code

In exampleComponent I've' projected titleComponent and itemComponent into childComponent like this


{{ngAfterContent.sourceCode.exampleComponent.name}}Full Code

So you can see result in the below image, I've queried instances of titleComponent & itemComponent



Notice that, Angular completes composition of the projected content before finishing the composition of this component's view.

We still have a window of opportunity to modify that view.


ngAfterView

The ngAfterViewInit and ngAfterViewChecked execute after initializing the component's views and child views


The hooks take action based on changing values within the child view which we can only reach by querying for the child view via ViewChild

The AfterView hooks concern ViewChildren, the child components whose element tags appear within the component's template.


Have a look at exampleComponent & the result below


{{ngAfterView.sourceCode.exampleComponent.name}}Full Code


Do you see I used setTimeout() in the example ?

If you try to update component's data-bound property immediately instead of using setTimeout, Angular throws an error.


Notice that we must adhere to Angular's unidirectional data flow rule which says that we may not update the view after it has been composed.

Both hooks fire after the component's view has been composed.


For ngAfterViewChecked, Angular frequently calls it, even when there are no changes of interest. Write lean hook methods to avoid performance problems


ngOnDestroy

This hook run just before Angular destroys the directive/component.

This is the place to free resources that won't be garbage collected automatically

Such as Unsubscribe from observables and DOM events. Stop interval timers etc

", + styles: [":host(.xblog-article-1473861890)>ngx-grid{font-size:.75rem;padding:1rem;background-color:#fff;box-shadow:0 1px 4px 0 rgba(0,0,0,0.14)}:host(.xblog-article-1473861890)>ngx-grid>ngx-grid-row:not(:last-child){border-bottom:1px solid #eceeef}:host(.xblog-article-1473861890)>ngx-grid>ngx-grid-row>ngx-grid-col{padding:1rem}"], + directives: [ + NGX_GRID_DIRECTIVES, + CODE_PANEL_DIRECTIVES, + HIGHLIGHT_DIRECTIVES, + TABLE_CONTENT_DIRECTIVES + ], + providers: [ TABLE_CONTENT_PROVIDERS ], + host: { + '[class.xblog-article-1473861890]': 'true' + } +}) +.Class({ + constructor: [ DomSanitizationService, cmsArticleService, + tableContentService, - function article1473861890Component(sanitizer, articleService){ + function (sanitizer, articleService, tableContentService){ this.id = 1473861890; this.sanitizer = sanitizer; this.articleService = articleService; + this.tableContentService = tableContentService; } - ]; + ], + + ngOnInit: function() { + this.tableContents = this.tableContentService + .getBuilder() + .addHeadings([ + { id: 'ngOnChanges', name: 'ngOnChanges' }, + { id: 'ngOnInit', name: 'ngOnInit' }, + { id: 'ngDoCheck', name: 'ngDoCheck' }, + { id: 'ngAfterContent', name: 'ngAfterContent' }, + { id: 'ngAfterView', name: 'ngAfterView' }, + { id: 'ngOnDestroy', name: 'ngOnDestroy' } + ]) + .build(); - this.ngOnInit = function() { this.ngOnChanges = { sourceCode: { exampleComponent: { @@ -103,26 +136,14 @@ function _article1473861890Component(){ 1: this.getCodeBlock('ng-after-view.html') } }; - }; + }, + + getCodeBlock: function(fileName, lang) { + var _langs = lang ? [ lang ] : ['javascript', 'html', 'css']; - this.getCodeBlock = function(fileName) { var _codeBlock = this.articleService.getCodeBlock(this.id, fileName); - _codeBlock = highlight.highlightAuto(_codeBlock, ['javascript']).value; - return this.sanitizer.bypassSecurityTrustHtml(_codeBlock); - }; -} + _codeBlock = highlight.highlightAuto(_codeBlock, _langs).value; -export var article1473861890Component = ngCore.Component({ - selector: 'article', - template: "

In previous articles, you've alreadry gotten knowledges about directives/components.

Go on with a subject relate to them, I'll show you their lifecycle.


A component has a lifecycle managed by Angular itself.

Angular offers component lifecycle hooks that give us the ability to act when they occur.

No directive or component will implement all of them and some of the hooks only make sense for components.


After component's constructor is called to create an instance, Angular calls its lifecycle hook methods in following sequence.

Angular only calls a hook method if it is defined.


ngOnChangesBefore ngOnInit and when a data-bound input property value changes.ngOnInitAfter the first ngOnChanges.ngDoCheckDuring every Angular change detection cycle.ngAfterContentInitAfter projecting content into the component.ngAfterContentCheckedAfter every check of projected component content.ngAfterViewInitAfter initializing the component's views and child views.ngAfterViewCheckedAfter every check of the component's views and child views.ngOnDestroyJust before Angular destroys the directive/component.

We'll detail each lifecycle hook and find out how we should work with them


ngOnChanges

This hook method executes before ngOnInit and when a data-bound input property value changes.

The method receives a object of current and previous values, I call it is changeRecord


For example, I have ngOnChangesComponent as below


{{ngOnChanges.sourceCode.exampleComponent.name}}Full Code

There're 2 binding, title is a primitive value, model is an object

Because I bound data to childComponent so after its constructor executed, its ngOnChanges will be fired.

3 seconds later, its ngOnChanges fires one more time because I've changed data-bound property values

As you see the below image, although ngOnChanges fires twice, but its changeRecord is not same.

In the second changes, changeRecord only contains current and previous values of title

The value of model property is the reference to the object. Angular doesn't care if any its property's value changed.

If you really want Angular to fire ngOnChanges for every changes of model. Immutable will be a solution for you



ngOnInit

This hook method executes after the first ngOnChanges

We turn to ngOnInit for 2 reasons

- To perform complex initializations shortly after construction

- To set up the component after Angular sets the input properties


Why shouldn't we fetch data from server in the constructor ? Because data-bound input properties only are set after construction.

If you fetch data with params which base on values of input properties, make sure you will get errors.

The constructor should do no more than set the initial local variables to simple values.


Look at the example with childComponent


{{ngOnInit.sourceCode.childComponent.name}}Full Code

And this is a screen capture for result



ngDoCheck

It is called with enormous frequency, Angular fires it after every change detection cycle no matter where the change occurred

Look at below sample, when you type something into textbox ngDoCheck will be called.

Even, you move out of textbox, it's also called.


{{ngDoCheck.sourceCode.childComponent.name}}Full Code


Clearly, if you decide to implement your logic in there, make sure implementation must be very lightweight or the user experience may suffer


ngAfterContent

The ngAfterContentInit and ngAfterContentChecked hooks that Angular calls after Angular projects external content into the component.

Angular calls both ngAfterContent hooks before calling either of the ngAfterView hooks.


The hooks take action based on changing values in a content child which we can only reach by querying for it via ContentChild

The ngAfterContent hooks concern ContentChildren, the child components that Angular projected into the component


Using ng-content is a way to import Html from outside the component and insert content into component's template in a designated spot


I have an exemple with childComponent which use ng-content like this


{{ngAfterContent.sourceCode.childComponent.name}}Full Code

In exampleComponent I've' projected titleComponent and itemComponent into childComponent like this


{{ngAfterContent.sourceCode.exampleComponent.name}}Full Code

So you can see result in the below image, I've queried instances of titleComponent & itemComponent



Notice that, Angular completes composition of the projected content before finishing the composition of this component's view.

We still have a window of opportunity to modify that view.


ngAfterView

The ngAfterViewInit and ngAfterViewChecked execute after initializing the component's views and child views


The hooks take action based on changing values within the child view which we can only reach by querying for the child view via ViewChild

The AfterView hooks concern ViewChildren, the child components whose element tags appear within the component's template.


Have a look at exampleComponent & the result below


{{ngAfterView.sourceCode.exampleComponent.name}}Full Code


Do you see I used setTimeout() in the example ?

If you try to update component's data-bound property immediately instead of using setTimeout, Angular throws an error.


Notice that we must adhere to Angular's unidirectional data flow rule which says that we may not update the view after it has been composed.

Both hooks fire after the component's view has been composed.


For ngAfterViewChecked, Angular frequently calls it, even when there are no changes of interest. Write lean hook methods to avoid performance problems


ngOnDestroy

This hook run just before Angular destroys the directive/component.

This is the place to free resources that won't be garbage collected automatically

Such as Unsubscribe from observables and DOM events. Stop interval timers etc

", - styles: [":host(.xblog-article-1473861890)>ngx-grid{font-size:.75rem;padding:1rem;background-color:#fff;box-shadow:0 1px 4px 0 rgba(0,0,0,0.14)}:host(.xblog-article-1473861890)>ngx-grid>ngx-grid-row:not(:last-child){border-bottom:1px solid #eceeef}:host(.xblog-article-1473861890)>ngx-grid>ngx-grid-row>ngx-grid-col{padding:1rem}"], - directives: [ - NGX_GRID_DIRECTIVES, - CODE_PANEL_DIRECTIVES, - HIGHLIGHT_DIRECTIVES - ], - host: { - '[class.xblog-article-1473861890]': 'true' + return this.sanitizer.bypassSecurityTrustHtml(_codeBlock); } -}) -.Class(new _article1473861890Component()); +}); diff --git a/cms/articles/1473861890/templates/article-1473861890.html b/cms/articles/1473861890/templates/article-1473861890.html index b4d44e8..5408d43 100644 --- a/cms/articles/1473861890/templates/article-1473861890.html +++ b/cms/articles/1473861890/templates/article-1473861890.html @@ -68,13 +68,19 @@

We'll detail each lifecycle hook and find out how we should work with them


-

ngOnChanges

+ + +
Table of Contents
+
+
+
+

ngOnChanges

This hook method executes before ngOnInit and when a data-bound input property value changes.

The method receives a object of current and previous values, I call it is changeRecord


For example, I have ngOnChangesComponent as below


- + {{ngOnChanges.sourceCode.exampleComponent.name}} Full Code @@ -91,7 +97,7 @@

ngOnChanges



-

ngOnInit

+

ngOnInit

This hook method executes after the first ngOnChanges

We turn to ngOnInit for 2 reasons

- To perform complex initializations shortly after construction

@@ -103,7 +109,7 @@

ngOnInit


Look at the example with childComponent


- + {{ngOnInit.sourceCode.childComponent.name}} Full Code @@ -114,12 +120,12 @@

ngOnInit



-

ngDoCheck

+

ngDoCheck

It is called with enormous frequency, Angular fires it after every change detection cycle no matter where the change occurred

Look at below sample, when you type something into textbox ngDoCheck will be called.

Even, you move out of textbox, it's also called.


- + {{ngDoCheck.sourceCode.childComponent.name}} Full Code @@ -130,7 +136,7 @@

ngDoCheck


Clearly, if you decide to implement your logic in there, make sure implementation must be very lightweight or the user experience may suffer


-

ngAfterContent

+

ngAfterContent

The ngAfterContentInit and ngAfterContentChecked hooks that Angular calls after Angular projects external content into the component.

Angular calls both ngAfterContent hooks before calling either of the ngAfterView hooks.


@@ -141,7 +147,7 @@

ngAfterContent


I have an exemple with childComponent which use ng-content like this


- + {{ngAfterContent.sourceCode.childComponent.name}} Full Code @@ -150,7 +156,7 @@

ngAfterContent


In exampleComponent I've' projected titleComponent and itemComponent into childComponent like this


- + {{ngAfterContent.sourceCode.exampleComponent.name}} Full Code @@ -164,7 +170,7 @@

ngAfterContent

Notice that, Angular completes composition of the projected content before finishing the composition of this component's view.

We still have a window of opportunity to modify that view.


-

ngAfterView

+

ngAfterView

The ngAfterViewInit and ngAfterViewChecked execute after initializing the component's views and child views


The hooks take action based on changing values within the child view which we can only reach by querying for the child view via ViewChild

@@ -172,7 +178,7 @@

ngAfterView


Have a look at exampleComponent & the result below


- + {{ngAfterView.sourceCode.exampleComponent.name}} Full Code @@ -189,7 +195,7 @@

ngAfterView


For ngAfterViewChecked, Angular frequently calls it, even when there are no changes of interest. Write lean hook methods to avoid performance problems


-

ngOnDestroy

+

ngOnDestroy

This hook run just before Angular destroys the directive/component.

This is the place to free resources that won't be garbage collected automatically

Such as Unsubscribe from observables and DOM events. Stop interval timers etc

\ No newline at end of file From ba4b2cc4bd30577b3c7c18d4c2ed8058e5c0eeb8 Mon Sep 17 00:00:00 2001 From: Minh Van Date: Sat, 8 Oct 2016 01:08:19 +0700 Subject: [PATCH 6/9] Changed code blocks to syntax ngCore.Component().Class() --- .../code-blocks/ng-after-content-1.html | 30 ++++++------- .../code-blocks/ng-after-content-2.html | 24 +++++----- .../1473861890/code-blocks/ng-after-view.html | 44 +++++++++---------- .../1473861890/code-blocks/ng-do-check.html | 39 ++++++++-------- .../1473861890/code-blocks/ng-on-changes.html | 24 +++++----- .../1473861890/code-blocks/ng-on-init.html | 24 +++++----- 6 files changed, 88 insertions(+), 97 deletions(-) diff --git a/cms/articles/1473861890/code-blocks/ng-after-content-1.html b/cms/articles/1473861890/code-blocks/ng-after-content-1.html index a7596af..bc2584a 100644 --- a/cms/articles/1473861890/code-blocks/ng-after-content-1.html +++ b/cms/articles/1473861890/code-blocks/ng-after-content-1.html @@ -3,28 +3,26 @@ import { titleComponent } from './title.component'; import { itemComponent } from './item.component'; -function _childComponent (){ - this.constructor = function childComponent(){}; +export var childComponent = ngCore.Component({ + selector: 'my-child', + template: '', + queries: { + title: new ngCore.ContentChild(titleComponent), + items: new ngCore.ContentChildren(itemComponent) + } +}) +.Class({ + constructor: function(){}, - this.ngAfterContentInit = function(){ + ngAfterContentInit: function(){ //title & items will be available since there console.log('title', this.title); console.log('items', this.items); - }; + }, - this.ngAfterContentChecked = function(){ + ngAfterContentChecked: function(){ // If there're changes to contentChild // contentChild is updated at there after the content has been checked // This event is fired after every check of projected component content - }; -} - -export var childComponent = ngCore.Component({ - selector: 'my-child', - template: '', - queries: { - title: new ngCore.ContentChild(titleComponent), - items: new ngCore.ContentChildren(itemComponent) } -}) -.Class(new _childComponent()); \ No newline at end of file +}); \ No newline at end of file diff --git a/cms/articles/1473861890/code-blocks/ng-after-content-2.html b/cms/articles/1473861890/code-blocks/ng-after-content-2.html index d5582a6..6af2388 100644 --- a/cms/articles/1473861890/code-blocks/ng-after-content-2.html +++ b/cms/articles/1473861890/code-blocks/ng-after-content-2.html @@ -4,18 +4,6 @@ import { titleComponent } from './title.component'; import { itemComponent } from './item.component'; -function _ngAfterContentComponent (){ - this.constructor = function ngAfterContentComponent(){}; - - this.ngOnInit = function() { - this.title = 'ngAfterContent'; - this.items = [ - { id: 1, name: 'item 01' }, - { id: 2, name: 'item 02' } - ]; - }; -} - export var ngAfterContentComponent = ngCore.Component({ selector: 'my-example', template: [ @@ -30,4 +18,14 @@ itemComponent ] }) -.Class(new _ngAfterContentComponent()); \ No newline at end of file +.Class({ + constructor: function(){}, + + ngOnInit: function() { + this.title = 'ngAfterContent'; + this.items = [ + { id: 1, name: 'item 01' }, + { id: 2, name: 'item 02' } + ]; + } +}); \ No newline at end of file diff --git a/cms/articles/1473861890/code-blocks/ng-after-view.html b/cms/articles/1473861890/code-blocks/ng-after-view.html index 4a6b145..6451cea 100644 --- a/cms/articles/1473861890/code-blocks/ng-after-view.html +++ b/cms/articles/1473861890/code-blocks/ng-after-view.html @@ -2,25 +2,38 @@ import { childComponent } from './child.component'; -function _ngAfterViewComponent (){ - this.constructor = function ngAfterViewComponent(){}; +export var ngAfterViewComponent = ngCore.Component({ + selector: 'my-example', + template: [ + '

', + '', + '
ngAfterViewChecked is fired: {{noChangeCount}}x
' + ].join(''), + directives: [ childComponent ], + queries: { + title: new ngCore.ViewChild('title', { read: ngCore.ElementRef }), + childs: new ngCore.ViewChildren(childComponent) + } +}) +.Class({ + constructor: function(){}, - this.ngOnInit = function() { + ngOnInit: function() { this.items = [ { id: 1, name: 'item 01' }, { id: 2, name: 'item 02' } ]; this.noChangeCount = 0; - }; + }, - this.ngAfterViewInit = function(){ + ngAfterViewInit: function(){ //title & childs will be available since there this.title.nativeElement.innerHTML = 'ngAfterView'; console.log('title', this.title.nativeElement); console.log('childs', this.items); - }; + }, - this.ngAfterViewChecked = function(){ + ngAfterViewChecked: function(){ // If there're changes to ViewChild // ViewChild is updated at there after the view has been checked // This event is fired after every check of the component's views and child views. @@ -28,20 +41,5 @@ setTimeout(function(){ if(!_self.noChangeCount){ _self.noChangeCount++; } }); - }; -} - -export var ngAfterViewComponent = ngCore.Component({ - selector: 'my-example', - template: [ - '

', - '', - '
ngAfterViewChecked is fired: {{noChangeCount}}x
' - ].join(''), - directives: [ childComponent ], - queries: { - title: new ngCore.ViewChild('title', { read: ngCore.ElementRef }), - childs: new ngCore.ViewChildren(childComponent) } -}) -.Class(new _ngAfterViewComponent()); \ No newline at end of file +}); \ No newline at end of file diff --git a/cms/articles/1473861890/code-blocks/ng-do-check.html b/cms/articles/1473861890/code-blocks/ng-do-check.html index 562c4c5..ad5fb91 100644 --- a/cms/articles/1473861890/code-blocks/ng-do-check.html +++ b/cms/articles/1473861890/code-blocks/ng-do-check.html @@ -1,15 +1,26 @@ -function _childComponent (){ - this.constructor = function childComponent(){ - }; +import * as ngCore from '@angular/core'; - this.ngOnInit = function(){ +export var childComponent = ngCore.Component({ + selector: 'my-child', + template: [ + '
', + '

ngDoCheck Example

', + 'Title: ', + '
' + ].join(''), + properties: ['title'] +}) +.Class({ + constructor: function(){}, + + ngOnInit: function(){ this.model = { }; this.model.title = this.currentTitle = this.title; this.noChangeCount = 0; this.changeDetected = null; - }; + }, - this.ngDoCheck = function(){ + ngDoCheck: function(){ if (this.model.title !== this.currentTitle) { this.changeDetected = true; @@ -25,17 +36,5 @@ } this.changeDetected = false; - }; -} - -export var childComponent = ngCore.Component({ - selector: 'my-child', - template: [ - '
', - '

ngDoCheck Example

', - 'Title: ', - '
' - ].join(''), - properties: ['title'] -}) -.Class(new _childComponent()); \ No newline at end of file + } +}); \ No newline at end of file diff --git a/cms/articles/1473861890/code-blocks/ng-on-changes.html b/cms/articles/1473861890/code-blocks/ng-on-changes.html index 76bfa97..0fdfabf 100644 --- a/cms/articles/1473861890/code-blocks/ng-on-changes.html +++ b/cms/articles/1473861890/code-blocks/ng-on-changes.html @@ -1,9 +1,16 @@ +import * as ngCore from '@angular/core'; + import { childComponent } from './child.component'; -function _ngOnChangesComponent (){ - this.constructor = function ngOnChangesComponent(){}; +export var ngOnChangesComponent = ngCore.Component({ + selector: 'my-example', + template: '', + directives: [ childComponent ] +}) +.Class({ + constructor: function(){}, - this.ngOnInit = function() { + ngOnInit: function() { this.title = 'ngOnChanges'; this.model = { content: 'This is content of ngOnChanges' }; @@ -12,12 +19,5 @@ _self.title = 'ngOnChanges updated'; _self.model.content = 'This is content of ngOnChanges'; }, 3 * 1000); - }; -} - -export var ngOnChangesComponent = ngCore.Component({ - selector: 'my-example', - template: '', - directives: [ childComponent ] -}) -.Class(new _ngOnChangesComponent()); \ No newline at end of file + } +}); \ No newline at end of file diff --git a/cms/articles/1473861890/code-blocks/ng-on-init.html b/cms/articles/1473861890/code-blocks/ng-on-init.html index 87803a4..c974ea3 100644 --- a/cms/articles/1473861890/code-blocks/ng-on-init.html +++ b/cms/articles/1473861890/code-blocks/ng-on-init.html @@ -1,17 +1,5 @@ import * as ngCore from '@angular/core'; -function _childComponent (){ - this.constructor = function childComponent(){ - console.log(this.title); - console.log(this.model); - }; - - this.ngOnInit = function(){ - console.log(this.title); - console.log(this.model); - }; -} - export var childComponent = ngCore.Component({ selector: 'my-child', template: [ @@ -20,4 +8,14 @@ ].join(''), properties: ['title', 'model'] }) -.Class(new _childComponent()); \ No newline at end of file +.Class({ + constructor: function(){ + console.log(this.title); + console.log(this.model); + }, + + ngOnInit: function(){ + console.log(this.title); + console.log(this.model); + } +}); \ No newline at end of file From aea375989fb7603f83bef8568c3faa6c6e16f975 Mon Sep 17 00:00:00 2001 From: Minh Van Date: Thu, 20 Oct 2016 23:22:31 +0700 Subject: [PATCH 7/9] Upgrade to @angular 2.0.2 --- .../_article-1473861890.component.js | 28 +++++-------------- .../article-1473861890.component.js | 28 +++++-------------- cms/articles/index.js | 5 ++++ 3 files changed, 19 insertions(+), 42 deletions(-) diff --git a/cms/articles/1473861890/_article-1473861890.component.js b/cms/articles/1473861890/_article-1473861890.component.js index ecfb330..843877e 100644 --- a/cms/articles/1473861890/_article-1473861890.component.js +++ b/cms/articles/1473861890/_article-1473861890.component.js @@ -1,40 +1,26 @@ -import * as ngCore from '@angular/core'; -import { DomSanitizationService } from '@angular/platform-browser'; +import { Component } from '@angular/core'; +import { DomSanitizer } from '@angular/platform-browser'; import highlight from 'highlight.js'; - import { NGX_GRID_DIRECTIVES } from 'ngx-bootstrap/components'; - -import { - CODE_PANEL_DIRECTIVES, - HIGHLIGHT_DIRECTIVES, - TABLE_CONTENT_DIRECTIVES, - TABLE_CONTENT_PROVIDERS, - tableContentService, -} from 'xblog-cores/components'; +import { xblogTableContentService } from 'xblog-cores/modules'; import { resourceUtils } from 'xblog-cores/utils'; + import { cmsArticleService } from '../../cores/services'; -export var article1473861890Component = ngCore.Component({ +export var article1473861890Component = Component({ selector: 'article', templateUrl: './templates/article-1473861890.html', styleUrls: ['./styles/article-1473861890.scss'], - directives: [ - NGX_GRID_DIRECTIVES, - CODE_PANEL_DIRECTIVES, - HIGHLIGHT_DIRECTIVES, - TABLE_CONTENT_DIRECTIVES - ], - providers: [ TABLE_CONTENT_PROVIDERS ], host: { '[class.xblog-article-1473861890]': 'true' } }) .Class({ constructor: [ - DomSanitizationService, + DomSanitizer, cmsArticleService, - tableContentService, + xblogTableContentService, function (sanitizer, articleService, tableContentService){ this.id = 1473861890; diff --git a/cms/articles/1473861890/article-1473861890.component.js b/cms/articles/1473861890/article-1473861890.component.js index 04da157..2daae8b 100644 --- a/cms/articles/1473861890/article-1473861890.component.js +++ b/cms/articles/1473861890/article-1473861890.component.js @@ -1,40 +1,26 @@ -import * as ngCore from '@angular/core'; -import { DomSanitizationService } from '@angular/platform-browser'; +import { Component } from '@angular/core'; +import { DomSanitizer } from '@angular/platform-browser'; import highlight from 'highlight.js'; - import { NGX_GRID_DIRECTIVES } from 'ngx-bootstrap/components'; - -import { - CODE_PANEL_DIRECTIVES, - HIGHLIGHT_DIRECTIVES, - TABLE_CONTENT_DIRECTIVES, - TABLE_CONTENT_PROVIDERS, - tableContentService, -} from 'xblog-cores/components'; +import { xblogTableContentService } from 'xblog-cores/modules'; import { resourceUtils } from 'xblog-cores/utils'; + import { cmsArticleService } from '../../cores/services'; -export var article1473861890Component = ngCore.Component({ +export var article1473861890Component = Component({ selector: 'article', template: "

In previous articles, you've alreadry gotten knowledges about directives/components.

Go on with a subject relate to them, I'll show you their lifecycle.


A component has a lifecycle managed by Angular itself.

Angular offers component lifecycle hooks that give us the ability to act when they occur.

No directive or component will implement all of them and some of the hooks only make sense for components.


After component's constructor is called to create an instance, Angular calls its lifecycle hook methods in following sequence.

Angular only calls a hook method if it is defined.


ngOnChangesBefore ngOnInit and when a data-bound input property value changes.ngOnInitAfter the first ngOnChanges.ngDoCheckDuring every Angular change detection cycle.ngAfterContentInitAfter projecting content into the component.ngAfterContentCheckedAfter every check of projected component content.ngAfterViewInitAfter initializing the component's views and child views.ngAfterViewCheckedAfter every check of the component's views and child views.ngOnDestroyJust before Angular destroys the directive/component.

We'll detail each lifecycle hook and find out how we should work with them


Table of Contents

ngOnChanges

This hook method executes before ngOnInit and when a data-bound input property value changes.

The method receives a object of current and previous values, I call it is changeRecord


For example, I have ngOnChangesComponent as below


{{ngOnChanges.sourceCode.exampleComponent.name}}Full Code

There're 2 binding, title is a primitive value, model is an object

Because I bound data to childComponent so after its constructor executed, its ngOnChanges will be fired.

3 seconds later, its ngOnChanges fires one more time because I've changed data-bound property values

As you see the below image, although ngOnChanges fires twice, but its changeRecord is not same.

In the second changes, changeRecord only contains current and previous values of title

The value of model property is the reference to the object. Angular doesn't care if any its property's value changed.

If you really want Angular to fire ngOnChanges for every changes of model. Immutable will be a solution for you



ngOnInit

This hook method executes after the first ngOnChanges

We turn to ngOnInit for 2 reasons

- To perform complex initializations shortly after construction

- To set up the component after Angular sets the input properties


Why shouldn't we fetch data from server in the constructor ? Because data-bound input properties only are set after construction.

If you fetch data with params which base on values of input properties, make sure you will get errors.

The constructor should do no more than set the initial local variables to simple values.


Look at the example with childComponent


{{ngOnInit.sourceCode.childComponent.name}}Full Code

And this is a screen capture for result



ngDoCheck

It is called with enormous frequency, Angular fires it after every change detection cycle no matter where the change occurred

Look at below sample, when you type something into textbox ngDoCheck will be called.

Even, you move out of textbox, it's also called.


{{ngDoCheck.sourceCode.childComponent.name}}Full Code


Clearly, if you decide to implement your logic in there, make sure implementation must be very lightweight or the user experience may suffer


ngAfterContent

The ngAfterContentInit and ngAfterContentChecked hooks that Angular calls after Angular projects external content into the component.

Angular calls both ngAfterContent hooks before calling either of the ngAfterView hooks.


The hooks take action based on changing values in a content child which we can only reach by querying for it via ContentChild

The ngAfterContent hooks concern ContentChildren, the child components that Angular projected into the component


Using ng-content is a way to import Html from outside the component and insert content into component's template in a designated spot


I have an exemple with childComponent which use ng-content like this


{{ngAfterContent.sourceCode.childComponent.name}}Full Code

In exampleComponent I've' projected titleComponent and itemComponent into childComponent like this


{{ngAfterContent.sourceCode.exampleComponent.name}}Full Code

So you can see result in the below image, I've queried instances of titleComponent & itemComponent



Notice that, Angular completes composition of the projected content before finishing the composition of this component's view.

We still have a window of opportunity to modify that view.


ngAfterView

The ngAfterViewInit and ngAfterViewChecked execute after initializing the component's views and child views


The hooks take action based on changing values within the child view which we can only reach by querying for the child view via ViewChild

The AfterView hooks concern ViewChildren, the child components whose element tags appear within the component's template.


Have a look at exampleComponent & the result below


{{ngAfterView.sourceCode.exampleComponent.name}}Full Code


Do you see I used setTimeout() in the example ?

If you try to update component's data-bound property immediately instead of using setTimeout, Angular throws an error.


Notice that we must adhere to Angular's unidirectional data flow rule which says that we may not update the view after it has been composed.

Both hooks fire after the component's view has been composed.


For ngAfterViewChecked, Angular frequently calls it, even when there are no changes of interest. Write lean hook methods to avoid performance problems


ngOnDestroy

This hook run just before Angular destroys the directive/component.

This is the place to free resources that won't be garbage collected automatically

Such as Unsubscribe from observables and DOM events. Stop interval timers etc

", styles: [":host(.xblog-article-1473861890)>ngx-grid{font-size:.75rem;padding:1rem;background-color:#fff;box-shadow:0 1px 4px 0 rgba(0,0,0,0.14)}:host(.xblog-article-1473861890)>ngx-grid>ngx-grid-row:not(:last-child){border-bottom:1px solid #eceeef}:host(.xblog-article-1473861890)>ngx-grid>ngx-grid-row>ngx-grid-col{padding:1rem}"], - directives: [ - NGX_GRID_DIRECTIVES, - CODE_PANEL_DIRECTIVES, - HIGHLIGHT_DIRECTIVES, - TABLE_CONTENT_DIRECTIVES - ], - providers: [ TABLE_CONTENT_PROVIDERS ], host: { '[class.xblog-article-1473861890]': 'true' } }) .Class({ constructor: [ - DomSanitizationService, + DomSanitizer, cmsArticleService, - tableContentService, + xblogTableContentService, function (sanitizer, articleService, tableContentService){ this.id = 1473861890; diff --git a/cms/articles/index.js b/cms/articles/index.js index 732f523..9a3607f 100644 --- a/cms/articles/index.js +++ b/cms/articles/index.js @@ -1,6 +1,8 @@ import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; +import { ngxGridModule } from 'ngx-framework/modules'; + import { xblogCodePanelModule, xblogHighlightModule, @@ -23,6 +25,9 @@ var _ARTICLE_COMPONENTS = ARTICLE_STORE.LIST.map(function(article){ export var cmsArticlesModule = NgModule({ imports: [ BrowserModule, + + ngxGridModule, + xblogCodePanelModule, xblogHighlightModule, xblogTableContentModule From 14c57e99077dcaa42b37d696ca06b7e40fe60098 Mon Sep 17 00:00:00 2001 From: Minh Van Date: Sat, 12 Nov 2016 11:48:55 +0700 Subject: [PATCH 8/9] Updated "Component Lifecycle" article --- .../_article-1473861890.component.js | 1 - .../article-1473861890.component.js | 3 +- .../1473861890/styles/_variables.scss | 11 -- .../1473861890/styles/article-1473861890.scss | 20 --- .../templates/article-1473861890.html | 151 +++++++++--------- 5 files changed, 80 insertions(+), 106 deletions(-) delete mode 100644 cms/articles/1473861890/styles/_variables.scss delete mode 100644 cms/articles/1473861890/styles/article-1473861890.scss diff --git a/cms/articles/1473861890/_article-1473861890.component.js b/cms/articles/1473861890/_article-1473861890.component.js index 843877e..063ac25 100644 --- a/cms/articles/1473861890/_article-1473861890.component.js +++ b/cms/articles/1473861890/_article-1473861890.component.js @@ -11,7 +11,6 @@ import { cmsArticleService } from '../../cores/services'; export var article1473861890Component = Component({ selector: 'article', templateUrl: './templates/article-1473861890.html', - styleUrls: ['./styles/article-1473861890.scss'], host: { '[class.xblog-article-1473861890]': 'true' } diff --git a/cms/articles/1473861890/article-1473861890.component.js b/cms/articles/1473861890/article-1473861890.component.js index 2daae8b..d6eac1e 100644 --- a/cms/articles/1473861890/article-1473861890.component.js +++ b/cms/articles/1473861890/article-1473861890.component.js @@ -10,8 +10,7 @@ import { cmsArticleService } from '../../cores/services'; export var article1473861890Component = Component({ selector: 'article', - template: "

In previous articles, you've alreadry gotten knowledges about directives/components.

Go on with a subject relate to them, I'll show you their lifecycle.


A component has a lifecycle managed by Angular itself.

Angular offers component lifecycle hooks that give us the ability to act when they occur.

No directive or component will implement all of them and some of the hooks only make sense for components.


After component's constructor is called to create an instance, Angular calls its lifecycle hook methods in following sequence.

Angular only calls a hook method if it is defined.


ngOnChangesBefore ngOnInit and when a data-bound input property value changes.ngOnInitAfter the first ngOnChanges.ngDoCheckDuring every Angular change detection cycle.ngAfterContentInitAfter projecting content into the component.ngAfterContentCheckedAfter every check of projected component content.ngAfterViewInitAfter initializing the component's views and child views.ngAfterViewCheckedAfter every check of the component's views and child views.ngOnDestroyJust before Angular destroys the directive/component.

We'll detail each lifecycle hook and find out how we should work with them


Table of Contents

ngOnChanges

This hook method executes before ngOnInit and when a data-bound input property value changes.

The method receives a object of current and previous values, I call it is changeRecord


For example, I have ngOnChangesComponent as below


{{ngOnChanges.sourceCode.exampleComponent.name}}Full Code

There're 2 binding, title is a primitive value, model is an object

Because I bound data to childComponent so after its constructor executed, its ngOnChanges will be fired.

3 seconds later, its ngOnChanges fires one more time because I've changed data-bound property values

As you see the below image, although ngOnChanges fires twice, but its changeRecord is not same.

In the second changes, changeRecord only contains current and previous values of title

The value of model property is the reference to the object. Angular doesn't care if any its property's value changed.

If you really want Angular to fire ngOnChanges for every changes of model. Immutable will be a solution for you



ngOnInit

This hook method executes after the first ngOnChanges

We turn to ngOnInit for 2 reasons

- To perform complex initializations shortly after construction

- To set up the component after Angular sets the input properties


Why shouldn't we fetch data from server in the constructor ? Because data-bound input properties only are set after construction.

If you fetch data with params which base on values of input properties, make sure you will get errors.

The constructor should do no more than set the initial local variables to simple values.


Look at the example with childComponent


{{ngOnInit.sourceCode.childComponent.name}}Full Code

And this is a screen capture for result



ngDoCheck

It is called with enormous frequency, Angular fires it after every change detection cycle no matter where the change occurred

Look at below sample, when you type something into textbox ngDoCheck will be called.

Even, you move out of textbox, it's also called.


{{ngDoCheck.sourceCode.childComponent.name}}Full Code


Clearly, if you decide to implement your logic in there, make sure implementation must be very lightweight or the user experience may suffer


ngAfterContent

The ngAfterContentInit and ngAfterContentChecked hooks that Angular calls after Angular projects external content into the component.

Angular calls both ngAfterContent hooks before calling either of the ngAfterView hooks.


The hooks take action based on changing values in a content child which we can only reach by querying for it via ContentChild

The ngAfterContent hooks concern ContentChildren, the child components that Angular projected into the component


Using ng-content is a way to import Html from outside the component and insert content into component's template in a designated spot


I have an exemple with childComponent which use ng-content like this


{{ngAfterContent.sourceCode.childComponent.name}}Full Code

In exampleComponent I've' projected titleComponent and itemComponent into childComponent like this


{{ngAfterContent.sourceCode.exampleComponent.name}}Full Code

So you can see result in the below image, I've queried instances of titleComponent & itemComponent



Notice that, Angular completes composition of the projected content before finishing the composition of this component's view.

We still have a window of opportunity to modify that view.


ngAfterView

The ngAfterViewInit and ngAfterViewChecked execute after initializing the component's views and child views


The hooks take action based on changing values within the child view which we can only reach by querying for the child view via ViewChild

The AfterView hooks concern ViewChildren, the child components whose element tags appear within the component's template.


Have a look at exampleComponent & the result below


{{ngAfterView.sourceCode.exampleComponent.name}}Full Code


Do you see I used setTimeout() in the example ?

If you try to update component's data-bound property immediately instead of using setTimeout, Angular throws an error.


Notice that we must adhere to Angular's unidirectional data flow rule which says that we may not update the view after it has been composed.

Both hooks fire after the component's view has been composed.


For ngAfterViewChecked, Angular frequently calls it, even when there are no changes of interest. Write lean hook methods to avoid performance problems


ngOnDestroy

This hook run just before Angular destroys the directive/component.

This is the place to free resources that won't be garbage collected automatically

Such as Unsubscribe from observables and DOM events. Stop interval timers etc

", - styles: [":host(.xblog-article-1473861890)>ngx-grid{font-size:.75rem;padding:1rem;background-color:#fff;box-shadow:0 1px 4px 0 rgba(0,0,0,0.14)}:host(.xblog-article-1473861890)>ngx-grid>ngx-grid-row:not(:last-child){border-bottom:1px solid #eceeef}:host(.xblog-article-1473861890)>ngx-grid>ngx-grid-row>ngx-grid-col{padding:1rem}"], + template: "

In previous articles, you've alreadry gotten knowledges about directives/components.

Go on with a subject relate to them, I'll show you their lifecycle.


A component has a lifecycle managed by Angular itself.

Angular offers component lifecycle hooks that give us the ability to act when they occur.

No directive or component will implement all of them and some of the hooks only make sense for components.


After component's constructor is called to create an instance, Angular calls its lifecycle hook methods in following sequence.

Angular only calls a hook method if it is defined.


HooksTimingngOnChangesBefore ngOnInit and when a data-bound input property value changes.ngOnInitAfter the first ngOnChanges.ngDoCheckDuring every Angular change detection cycle.ngAfterContentInitAfter projecting content into the component.ngAfterContentCheckedAfter every check of projected component content.ngAfterViewInitAfter initializing the component's views and child views.ngAfterViewCheckedAfter every check of the component's views and child views.ngOnDestroyJust before Angular destroys the directive/component.

We'll detail each lifecycle hook and find out how we should work with them.


Table of Contents

ngOnChanges

This hook method executes before ngOnInit and when a data-bound input property value changes.

The method receives a object of current and previous values, I call it is changeRecord


For example, I have ngOnChangesComponent as below.


{{ngOnChanges.sourceCode.exampleComponent.name}}Full Code

There're 2 binding, title is a primitive value, model is an object.

Because I bound data to childComponent so after its constructor executed, its ngOnChanges will be fired.

3 seconds later, its ngOnChanges fires one more time because I've changed data-bound property values

As you see the below image, although ngOnChanges fires twice, but its changeRecord is not same.

In the second changes, changeRecord only contains current and previous values of title

The value of model property is the reference to the object. Angular doesn't care if any its property's value changed.

If you really want Angular to fire ngOnChanges for every changes of model. Immutable will be a solution for you.



ngOnInit

This hook method executes after the first ngOnChanges

We turn to ngOnInit for 2 reasons:


- To perform complex initializations shortly after construction

- To set up the component after Angular sets the input properties


Why shouldn't we fetch data from server in the constructor ? Because data-bound input properties only are set after construction.

If you fetch data with params which base on values of input properties, make sure you will get errors.

The constructor should do no more than set the initial local variables to simple values.


Look at the example with childComponent


{{ngOnInit.sourceCode.childComponent.name}}Full Code

And this is a screen capture for result.



ngDoCheck

It is called with enormous frequency, Angular fires it after every change detection cycle no matter where the change occurred.

Look at below sample, when you type something into textbox ngDoCheck will be called.

Even, you move out of textbox, it's also called.


{{ngDoCheck.sourceCode.childComponent.name}}Full Code


Clearly, if you decide to implement your logic in there, make sure implementation must be very lightweight or the user experience may suffer.


ngAfterContent

The ngAfterContentInit and ngAfterContentChecked hooks that Angular calls after Angular projects external content into the component.

Angular calls both ngAfterContent hooks before calling either of the ngAfterView hooks.


The hooks take action based on changing values in a content child which we can only reach by querying for it via ContentChild

The ngAfterContent hooks concern ContentChildren, the child components that Angular projected into the component.


Using ng-content is a way to import Html from outside the component and insert content into component's template in a designated spot.


I have an exemple with childComponent which use ng-content like this.


{{ngAfterContent.sourceCode.childComponent.name}}Full Code

In exampleComponent I've' projected titleComponent and itemComponent into childComponent like this.


{{ngAfterContent.sourceCode.exampleComponent.name}}Full Code

So you can see result in the below image, I've queried instances of titleComponent & itemComponent



Notice that, Angular completes composition of the projected content before finishing the composition of this component's view.

We still have a window of opportunity to modify that view.


ngAfterView

The ngAfterViewInit and ngAfterViewChecked execute after initializing the component's views and child views.


The hooks take action based on changing values within the child view which we can only reach by querying for the child view via ViewChild

The AfterView hooks concern ViewChildren, the child components whose element tags appear within the component's template.


Have a look at exampleComponent & the result below.


{{ngAfterView.sourceCode.exampleComponent.name}}Full Code


Do you see I used setTimeout() in the example ?

If you try to update component's data-bound property immediately instead of using setTimeout, Angular throws an error.


Notice that we must adhere to Angular's unidirectional data flow rule which says that we may not update the view after it has been composed.

Both hooks fire after the component's view has been composed.


For ngAfterViewChecked, Angular frequently calls it, even when there are no changes of interest. Write lean hook methods to avoid performance problems.


ngOnDestroy

This hook run just before Angular destroys the directive/component.

This is the place to free resources that won't be garbage collected automatically such as unsubscribe from observables and DOM events, stop interval timers etc.

", host: { '[class.xblog-article-1473861890]': 'true' } diff --git a/cms/articles/1473861890/styles/_variables.scss b/cms/articles/1473861890/styles/_variables.scss deleted file mode 100644 index 14476dd..0000000 --- a/cms/articles/1473861890/styles/_variables.scss +++ /dev/null @@ -1,11 +0,0 @@ -@import 'xblog-cores/styles/palette/index.scss'; -@import 'xblog-cores/styles/typography/index.scss'; - -$xblog-article-1473861890-grid-font-size: xblog-font-size(xs); -$xblog-article-1473861890-grid-padding: 1rem; -$xblog-article-1473861890-grid-background-color: xblog-color($xblog-color-white, light); -$xblog-article-1473861890-grid-box-shadow: 0 1px 4px 0 rgba(0,0,0,0.14); - -$xblog-article-1473861890-grid-row-border-bottom: 1px solid xblog-color($xblog-color-gray, light-1); - -$xblog-article-1473861890-grid-col-padding: 1rem; \ No newline at end of file diff --git a/cms/articles/1473861890/styles/article-1473861890.scss b/cms/articles/1473861890/styles/article-1473861890.scss deleted file mode 100644 index 1b17eb7..0000000 --- a/cms/articles/1473861890/styles/article-1473861890.scss +++ /dev/null @@ -1,20 +0,0 @@ -@import './_variables.scss'; - -:host(.xblog-article-1473861890){ - > ngx-grid { - font-size: $xblog-article-1473861890-grid-font-size; - padding: $xblog-article-1473861890-grid-padding; - background-color: $xblog-article-1473861890-grid-background-color; - box-shadow: $xblog-article-1473861890-grid-box-shadow; - - > ngx-grid-row { - &:not(:last-child) { - border-bottom: $xblog-article-1473861890-grid-row-border-bottom; - } - - > ngx-grid-col { - padding: $xblog-article-1473861890-grid-col-padding; - } - } - } -} \ No newline at end of file diff --git a/cms/articles/1473861890/templates/article-1473861890.html b/cms/articles/1473861890/templates/article-1473861890.html index 5408d43..9d5949d 100644 --- a/cms/articles/1473861890/templates/article-1473861890.html +++ b/cms/articles/1473861890/templates/article-1473861890.html @@ -8,65 +8,72 @@

After component's constructor is called to create an instance, Angular calls its lifecycle hook methods in following sequence.

Angular only calls a hook method if it is defined.


- - - ngOnChanges - - Before ngOnInit and when a data-bound input property value changes. - - + + + + Hooks + Timing + - - ngOnInit - - After the first ngOnChanges. - - + + ngOnChanges + + Before ngOnInit and when a data-bound input property value changes. + + - - ngDoCheck - - During every Angular change detection cycle. - - + + ngOnInit + + After the first ngOnChanges. + + - - ngAfterContentInit - - After projecting content into the component. - - + + ngDoCheck + + During every Angular change detection cycle. + + - - ngAfterContentChecked - - After every check of projected component content. - - + + ngAfterContentInit + + After projecting content into the component. + + - - ngAfterViewInit - - After initializing the component's views and child views. - - + + ngAfterContentChecked + + After every check of projected component content. + + - - ngAfterViewChecked - - After every check of the component's views and child views. - - + + ngAfterViewInit + + After initializing the component's views and child views. + + - - ngOnDestroy - - Just before Angular destroys the directive/component. - - - + + ngAfterViewChecked + + After every check of the component's views and child views. + + + + + ngOnDestroy + + Just before Angular destroys the directive/component. + + + +
-

We'll detail each lifecycle hook and find out how we should work with them

+

We'll detail each lifecycle hook and find out how we should work with them.


@@ -75,10 +82,10 @@

Table of Contents

ngOnChanges

-

This hook method executes before ngOnInit and when a data-bound input property value changes.

+

This hook method executes before ngOnInit and when a data-bound input property value changes.

The method receives a object of current and previous values, I call it is changeRecord


-

For example, I have ngOnChangesComponent as below

+

For example, I have ngOnChangesComponent as below.


{{ngOnChanges.sourceCode.exampleComponent.name}} @@ -87,19 +94,20 @@

ngOnChanges



-

There're 2 binding, title is a primitive value, model is an object

+

There're 2 binding, title is a primitive value, model is an object.

Because I bound data to childComponent so after its constructor executed, its ngOnChanges will be fired.

3 seconds later, its ngOnChanges fires one more time because I've changed data-bound property values

As you see the below image, although ngOnChanges fires twice, but its changeRecord is not same.

In the second changes, changeRecord only contains current and previous values of title

The value of model property is the reference to the object. Angular doesn't care if any its property's value changed.

-

If you really want Angular to fire ngOnChanges for every changes of model. Immutable will be a solution for you

+

If you really want Angular to fire ngOnChanges for every changes of model. Immutable will be a solution for you.



ngOnInit

-

This hook method executes after the first ngOnChanges

-

We turn to ngOnInit for 2 reasons

+

This hook method executes after the first ngOnChanges

+

We turn to ngOnInit for 2 reasons:

+

- To perform complex initializations shortly after construction

- To set up the component after Angular sets the input properties


@@ -116,13 +124,13 @@

ngOnInit



-

And this is a screen capture for result

+

And this is a screen capture for result.



ngDoCheck

-

It is called with enormous frequency, Angular fires it after every change detection cycle no matter where the change occurred

-

Look at below sample, when you type something into textbox ngDoCheck will be called.

+

It is called with enormous frequency, Angular fires it after every change detection cycle no matter where the change occurred.

+

Look at below sample, when you type something into textbox ngDoCheck will be called.

Even, you move out of textbox, it's also called.


@@ -134,18 +142,18 @@

ngDoCheck



-

Clearly, if you decide to implement your logic in there, make sure implementation must be very lightweight or the user experience may suffer

+

Clearly, if you decide to implement your logic in there, make sure implementation must be very lightweight or the user experience may suffer.


ngAfterContent

The ngAfterContentInit and ngAfterContentChecked hooks that Angular calls after Angular projects external content into the component.

-

Angular calls both ngAfterContent hooks before calling either of the ngAfterView hooks.

+

Angular calls both ngAfterContent hooks before calling either of the ngAfterView hooks.


The hooks take action based on changing values in a content child which we can only reach by querying for it via ContentChild

-

The ngAfterContent hooks concern ContentChildren, the child components that Angular projected into the component

+

The ngAfterContent hooks concern ContentChildren, the child components that Angular projected into the component.


-

Using ng-content is a way to import Html from outside the component and insert content into component's template in a designated spot

+

Using ng-content is a way to import Html from outside the component and insert content into component's template in a designated spot.


-

I have an exemple with childComponent which use ng-content like this

+

I have an exemple with childComponent which use ng-content like this.


{{ngAfterContent.sourceCode.childComponent.name}} @@ -154,7 +162,7 @@

ngAfterContent



-

In exampleComponent I've' projected titleComponent and itemComponent into childComponent like this

+

In exampleComponent I've' projected titleComponent and itemComponent into childComponent like this.


{{ngAfterContent.sourceCode.exampleComponent.name}} @@ -163,7 +171,7 @@

ngAfterContent



-

So you can see result in the below image, I've queried instances of titleComponent & itemComponent

+

So you can see result in the below image, I've queried instances of titleComponent & itemComponent



@@ -171,12 +179,12 @@

ngAfterContent

We still have a window of opportunity to modify that view.


ngAfterView

-

The ngAfterViewInit and ngAfterViewChecked execute after initializing the component's views and child views

+

The ngAfterViewInit and ngAfterViewChecked execute after initializing the component's views and child views.


The hooks take action based on changing values within the child view which we can only reach by querying for the child view via ViewChild

The AfterView hooks concern ViewChildren, the child components whose element tags appear within the component's template.


-

Have a look at exampleComponent & the result below

+

Have a look at exampleComponent & the result below.


{{ngAfterView.sourceCode.exampleComponent.name}} @@ -193,9 +201,8 @@

ngAfterView

Notice that we must adhere to Angular's unidirectional data flow rule which says that we may not update the view after it has been composed.

Both hooks fire after the component's view has been composed.


-

For ngAfterViewChecked, Angular frequently calls it, even when there are no changes of interest. Write lean hook methods to avoid performance problems

+

For ngAfterViewChecked, Angular frequently calls it, even when there are no changes of interest. Write lean hook methods to avoid performance problems.


ngOnDestroy

This hook run just before Angular destroys the directive/component.

-

This is the place to free resources that won't be garbage collected automatically

-

Such as Unsubscribe from observables and DOM events. Stop interval timers etc

\ No newline at end of file +

This is the place to free resources that won't be garbage collected automatically such as unsubscribe from observables and DOM events, stop interval timers etc.

\ No newline at end of file From 5de2c9af809639b8f8475efff252fad83109eb9e Mon Sep 17 00:00:00 2001 From: Minh Van Date: Wed, 16 Nov 2016 13:16:48 +0700 Subject: [PATCH 9/9] Updated "Component Lifecycle" article --- .../_article-1473861890.component.js | 245 +++++++++++++++-- .../article-1473861890.component.js | 247 ++++++++++++++++-- .../code-blocks/ng-after-content-1.html | 28 -- .../code-blocks/ng-after-content-2.html | 31 --- .../1473861890/code-blocks/ng-after-view.html | 45 ---- .../1473861890/code-blocks/ng-do-check.html | 40 --- .../1473861890/code-blocks/ng-on-changes.html | 23 -- .../1473861890/code-blocks/ng-on-init.html | 21 -- cms/articles/1473861890/index.js | 4 +- .../templates/article-1473861890.html | 23 +- 10 files changed, 467 insertions(+), 240 deletions(-) delete mode 100644 cms/articles/1473861890/code-blocks/ng-after-content-1.html delete mode 100644 cms/articles/1473861890/code-blocks/ng-after-content-2.html delete mode 100644 cms/articles/1473861890/code-blocks/ng-after-view.html delete mode 100644 cms/articles/1473861890/code-blocks/ng-do-check.html delete mode 100644 cms/articles/1473861890/code-blocks/ng-on-changes.html delete mode 100644 cms/articles/1473861890/code-blocks/ng-on-init.html diff --git a/cms/articles/1473861890/_article-1473861890.component.js b/cms/articles/1473861890/_article-1473861890.component.js index 063ac25..840a991 100644 --- a/cms/articles/1473861890/_article-1473861890.component.js +++ b/cms/articles/1473861890/_article-1473861890.component.js @@ -5,8 +5,6 @@ import highlight from 'highlight.js'; import { xblogTableContentService } from 'xblog-cores/modules'; import { resourceUtils } from 'xblog-cores/utils'; -import { cmsArticleService } from '../../cores/services'; - export var article1473861890Component = Component({ selector: 'article', @@ -18,13 +16,11 @@ export var article1473861890Component = Component({ .Class({ constructor: [ DomSanitizer, - cmsArticleService, xblogTableContentService, - function (sanitizer, articleService, tableContentService){ + function (sanitizer, tableContentService){ this.id = 1473861890; this.sanitizer = sanitizer; - this.articleService = articleService; this.tableContentService = tableContentService; } ], @@ -45,7 +41,7 @@ export var article1473861890Component = Component({ this.ngOnChanges = { sourceCode: { exampleComponent: { - name: 'example.component.js', + name: 'ngOnChanges', link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-on-changes/example.component.js') } }, @@ -53,14 +49,14 @@ export var article1473861890Component = Component({ 1: resourceUtils.getImg('ngOnChanges-example-1473861890.png') }, codeBlocks: { - 1: this.getCodeBlock('ng-on-changes.html') + 1: this.getCodeBlock(getNgOnChanges) } }; this.ngOnInit = { sourceCode: { childComponent: { - name: 'child.component.js', + name: 'ngOnInit', link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-on-init/child.component.js') } }, @@ -68,14 +64,14 @@ export var article1473861890Component = Component({ 1: resourceUtils.getImg('ngOnInit-example-1473861890.png') }, codeBlocks: { - 1: this.getCodeBlock('ng-on-init.html') + 1: this.getCodeBlock(getNgOnInit) } }; this.ngDoCheck = { sourceCode: { childComponent: { - name: 'child.component.js', + name: 'ngDoCheck', link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-do-check/child.component.js') } }, @@ -83,14 +79,14 @@ export var article1473861890Component = Component({ 1: resourceUtils.getImg('ngDoCheck-example-1473861890.png') }, codeBlocks: { - 1: this.getCodeBlock('ng-do-check.html') + 1: this.getCodeBlock(getNgDoCheck) } }; this.ngAfterContent = { sourceCode: { childComponent: { - name: 'child.component.js', + name: 'ngAfterContent', link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-after-content/child.component.js') }, exampleComponent: { @@ -102,15 +98,15 @@ export var article1473861890Component = Component({ 1: resourceUtils.getImg('ngAfterContent-example-1473861890.png') }, codeBlocks: { - 1: this.getCodeBlock('ng-after-content-1.html'), - 2: this.getCodeBlock('ng-after-content-2.html') + 1: this.getCodeBlock(getNgAfterContent01), + 2: this.getCodeBlock(getNgAfterContent02) } }; this.ngAfterView = { sourceCode: { exampleComponent: { - name: 'example.component.js', + name: 'ngAfterView', link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-after-view/example.component.js') } }, @@ -118,17 +114,228 @@ export var article1473861890Component = Component({ 1: resourceUtils.getImg('ngAfterView-example-1473861890.png') }, codeBlocks: { - 1: this.getCodeBlock('ng-after-view.html') + 1: this.getCodeBlock(getNgAfterView) } }; }, - getCodeBlock: function(fileName, lang) { + getCodeBlock: function(getter, lang) { var _langs = lang ? [ lang ] : ['javascript', 'html', 'css']; - var _codeBlock = this.articleService.getCodeBlock(this.id, fileName); - _codeBlock = highlight.highlightAuto(_codeBlock, _langs).value; + var _codeBlock = highlight.highlightAuto(getter().replace('\n', '').replace(/^ /gm, ''), _langs).value; return this.sanitizer.bypassSecurityTrustHtml(_codeBlock); } }); + +function getNgOnChanges(){ + return ` + import * as ngCore from '@angular/core'; + + import { childComponent } from './child.component'; + + export var ngOnChangesComponent = ngCore.Component({ + selector: 'my-example', + template: '', + directives: [ childComponent ] + }) + .Class({ + constructor: function(){}, + + ngOnInit: function() { + this.title = 'ngOnChanges'; + this.model = { content: 'This is content of ngOnChanges' }; + + var _self = this; + setTimeout(function(){ + _self.title = 'ngOnChanges updated'; + _self.model.content = 'This is content of ngOnChanges'; + }, 3 * 1000); + } + });`; +} + +function getNgOnInit(){ + return ` + import * as ngCore from '@angular/core'; + + export var childComponent = ngCore.Component({ + selector: 'my-child', + template: [ + '

{{title}}

', + '

{{model.content}}

' + ].join(''), + properties: ['title', 'model'] + }) + .Class({ + constructor: function(){ + console.log(this.title); + console.log(this.model); + }, + + ngOnInit: function(){ + console.log(this.title); + console.log(this.model); + } + });`; +} + +function getNgDoCheck(){ + return ` + import * as ngCore from '@angular/core'; + + export var childComponent = ngCore.Component({ + selector: 'my-child', + template: [ + '
', + '

ngDoCheck Example

', + 'Title: ', + '
' + ].join(''), + properties: ['title'] + }) + .Class({ + constructor: function(){}, + + ngOnInit: function(){ + this.model = { }; + this.model.title = this.currentTitle = this.title; + this.noChangeCount = 0; + this.changeDetected = null; + }, + + ngDoCheck: function(){ + if (this.model.title !== this.currentTitle) { + this.changeDetected = true; + + console.log('ngDoCheck: Title changed to ' + this.model.title + ' from ' + this.currentTitle); + + this.currentTitle = this.model.title; + } + + if (this.changeDetected) { this.noChangeCount = 0; } + else if (this.changeDetected === false) { + this.noChangeCount++; + console.log('ngDoCheck: called ' + this.noChangeCount + 'x when no change to title'); + } + + this.changeDetected = false; + } + });`; +} + +function getNgAfterContent01(){ + return ` + import * as ngCore from '@angular/core'; + + import { titleComponent } from './title.component'; + import { itemComponent } from './item.component'; + + export var childComponent = ngCore.Component({ + selector: 'my-child', + template: '', + queries: { + title: new ngCore.ContentChild(titleComponent), + items: new ngCore.ContentChildren(itemComponent) + } + }) + .Class({ + constructor: function(){}, + + ngAfterContentInit: function(){ + //title & items will be available since there + console.log('title', this.title); + console.log('items', this.items); + }, + + ngAfterContentChecked: function(){ + // If there're changes to contentChild + // contentChild is updated at there after the content has been checked + // This event is fired after every check of projected component content + } + });`; +} + +function getNgAfterContent02(){ + return ` + import * as ngCore from '@angular/core'; + + import { childComponent } from './child.component'; + import { titleComponent } from './title.component'; + import { itemComponent } from './item.component'; + + export var ngAfterContentComponent = ngCore.Component({ + selector: 'my-example', + template: [ + '', + '', + '', + '' + ].join(''), + directives: [ + childComponent, + titleComponent, + itemComponent + ] + }) + .Class({ + constructor: function(){}, + + ngOnInit: function() { + this.title = 'ngAfterContent'; + this.items = [ + { id: 1, name: 'item 01' }, + { id: 2, name: 'item 02' } + ]; + } + });`; +} + +function getNgAfterView(){ + return ` + import * as ngCore from '@angular/core'; + + import { childComponent } from './child.component'; + + export var ngAfterViewComponent = ngCore.Component({ + selector: 'my-example', + template: [ + '

', + '', + '
ngAfterViewChecked is fired: {{noChangeCount}}x
' + ].join(''), + directives: [ childComponent ], + queries: { + title: new ngCore.ViewChild('title', { read: ngCore.ElementRef }), + childs: new ngCore.ViewChildren(childComponent) + } + }) + .Class({ + constructor: function(){}, + + ngOnInit: function() { + this.items = [ + { id: 1, name: 'item 01' }, + { id: 2, name: 'item 02' } + ]; + this.noChangeCount = 0; + }, + + ngAfterViewInit: function(){ + //title & childs will be available since there + this.title.nativeElement.innerHTML = 'ngAfterView'; + console.log('title', this.title.nativeElement); + console.log('childs', this.items); + }, + + ngAfterViewChecked: function(){ + // If there're changes to ViewChild + // ViewChild is updated at there after the view has been checked + // This event is fired after every check of the component's views and child views. + var _self = this; + setTimeout(function(){ + if(!_self.noChangeCount){ _self.noChangeCount++; } + }); + } + });`; +} \ No newline at end of file diff --git a/cms/articles/1473861890/article-1473861890.component.js b/cms/articles/1473861890/article-1473861890.component.js index d6eac1e..c5852a6 100644 --- a/cms/articles/1473861890/article-1473861890.component.js +++ b/cms/articles/1473861890/article-1473861890.component.js @@ -5,12 +5,10 @@ import highlight from 'highlight.js'; import { xblogTableContentService } from 'xblog-cores/modules'; import { resourceUtils } from 'xblog-cores/utils'; -import { cmsArticleService } from '../../cores/services'; - export var article1473861890Component = Component({ selector: 'article', - template: "

In previous articles, you've alreadry gotten knowledges about directives/components.

Go on with a subject relate to them, I'll show you their lifecycle.


A component has a lifecycle managed by Angular itself.

Angular offers component lifecycle hooks that give us the ability to act when they occur.

No directive or component will implement all of them and some of the hooks only make sense for components.


After component's constructor is called to create an instance, Angular calls its lifecycle hook methods in following sequence.

Angular only calls a hook method if it is defined.


HooksTimingngOnChangesBefore ngOnInit and when a data-bound input property value changes.ngOnInitAfter the first ngOnChanges.ngDoCheckDuring every Angular change detection cycle.ngAfterContentInitAfter projecting content into the component.ngAfterContentCheckedAfter every check of projected component content.ngAfterViewInitAfter initializing the component's views and child views.ngAfterViewCheckedAfter every check of the component's views and child views.ngOnDestroyJust before Angular destroys the directive/component.

We'll detail each lifecycle hook and find out how we should work with them.


Table of Contents

ngOnChanges

This hook method executes before ngOnInit and when a data-bound input property value changes.

The method receives a object of current and previous values, I call it is changeRecord


For example, I have ngOnChangesComponent as below.


{{ngOnChanges.sourceCode.exampleComponent.name}}Full Code

There're 2 binding, title is a primitive value, model is an object.

Because I bound data to childComponent so after its constructor executed, its ngOnChanges will be fired.

3 seconds later, its ngOnChanges fires one more time because I've changed data-bound property values

As you see the below image, although ngOnChanges fires twice, but its changeRecord is not same.

In the second changes, changeRecord only contains current and previous values of title

The value of model property is the reference to the object. Angular doesn't care if any its property's value changed.

If you really want Angular to fire ngOnChanges for every changes of model. Immutable will be a solution for you.



ngOnInit

This hook method executes after the first ngOnChanges

We turn to ngOnInit for 2 reasons:


- To perform complex initializations shortly after construction

- To set up the component after Angular sets the input properties


Why shouldn't we fetch data from server in the constructor ? Because data-bound input properties only are set after construction.

If you fetch data with params which base on values of input properties, make sure you will get errors.

The constructor should do no more than set the initial local variables to simple values.


Look at the example with childComponent


{{ngOnInit.sourceCode.childComponent.name}}Full Code

And this is a screen capture for result.



ngDoCheck

It is called with enormous frequency, Angular fires it after every change detection cycle no matter where the change occurred.

Look at below sample, when you type something into textbox ngDoCheck will be called.

Even, you move out of textbox, it's also called.


{{ngDoCheck.sourceCode.childComponent.name}}Full Code


Clearly, if you decide to implement your logic in there, make sure implementation must be very lightweight or the user experience may suffer.


ngAfterContent

The ngAfterContentInit and ngAfterContentChecked hooks that Angular calls after Angular projects external content into the component.

Angular calls both ngAfterContent hooks before calling either of the ngAfterView hooks.


The hooks take action based on changing values in a content child which we can only reach by querying for it via ContentChild

The ngAfterContent hooks concern ContentChildren, the child components that Angular projected into the component.


Using ng-content is a way to import Html from outside the component and insert content into component's template in a designated spot.


I have an exemple with childComponent which use ng-content like this.


{{ngAfterContent.sourceCode.childComponent.name}}Full Code

In exampleComponent I've' projected titleComponent and itemComponent into childComponent like this.


{{ngAfterContent.sourceCode.exampleComponent.name}}Full Code

So you can see result in the below image, I've queried instances of titleComponent & itemComponent



Notice that, Angular completes composition of the projected content before finishing the composition of this component's view.

We still have a window of opportunity to modify that view.


ngAfterView

The ngAfterViewInit and ngAfterViewChecked execute after initializing the component's views and child views.


The hooks take action based on changing values within the child view which we can only reach by querying for the child view via ViewChild

The AfterView hooks concern ViewChildren, the child components whose element tags appear within the component's template.


Have a look at exampleComponent & the result below.


{{ngAfterView.sourceCode.exampleComponent.name}}Full Code


Do you see I used setTimeout() in the example ?

If you try to update component's data-bound property immediately instead of using setTimeout, Angular throws an error.


Notice that we must adhere to Angular's unidirectional data flow rule which says that we may not update the view after it has been composed.

Both hooks fire after the component's view has been composed.


For ngAfterViewChecked, Angular frequently calls it, even when there are no changes of interest. Write lean hook methods to avoid performance problems.


ngOnDestroy

This hook run just before Angular destroys the directive/component.

This is the place to free resources that won't be garbage collected automatically such as unsubscribe from observables and DOM events, stop interval timers etc.

", + template: "

In previous articles, you've alreadry gotten knowledges about directives/components.

Go on with a subject relate to them, I'll show you their lifecycle.


A component has a lifecycle managed by Angular itself.

Angular offers component lifecycle hooks that give us the ability to act when they occur.

No directive or component will implement all of them and some of the hooks only make sense for components.


After component's constructor is called to create an instance, Angular calls its lifecycle hook methods in following sequence.

Angular only calls a hook method if it is defined.


HooksTimingngOnChangesBefore ngOnInit and when a data-bound input property value changes.ngOnInitAfter the first ngOnChanges.ngDoCheckDuring every Angular change detection cycle.ngAfterContentInitAfter projecting content into the component.ngAfterContentCheckedAfter every check of projected component content.ngAfterViewInitAfter initializing the component's views and child views.ngAfterViewCheckedAfter every check of the component's views and child views.ngOnDestroyJust before Angular destroys the directive/component.

We'll detail each lifecycle hook and find out how we should work with them.


Table of Contents

ngOnChanges

This hook method executes before ngOnInit and when a data-bound input property value changes.

The method receives a object of current and previous values, I call it is changeRecord.


For example, I have ngOnChangesComponent as below.


{{ngOnChanges.sourceCode.exampleComponent.name}}Full Code

There're 2 binding, title is a primitive value, model is an object.

Because I bound data to childComponent so after its constructor executed, its ngOnChanges will be fired.

3 seconds later, its ngOnChanges fires one more time because I've changed data-bound property values.

As you see the below image, although ngOnChanges fires twice, but its changeRecord is not same.

In the second changes, changeRecord only contains current and previous values of title.

The value of model property is the reference to the object. Angular doesn't care if any its property's value changed.

If you really want Angular to fire ngOnChanges for every changes of model. Immutable will be a solution for you.



ngOnInit

This hook method executes after the first ngOnChanges.

We turn to ngOnInit for 2 reasons:


- To perform complex initializations shortly after construction.

- To set up the component after Angular sets the input properties.


Why shouldn't we fetch data from server in the constructor ? Because data-bound input properties only are set after construction.

If you fetch data with params which base on values of input properties, make sure you will get errors.

The constructor should do no more than set the initial local variables to simple values.


Look at the example with childComponent.


{{ngOnInit.sourceCode.childComponent.name}}Full Code

And this is a screen capture for result.



ngDoCheck

It is called with enormous frequency, Angular fires it after every change detection cycle no matter where the change occurred.

Look at below sample, when you type something into textbox ngDoCheck will be called.

Even, you move out of textbox, it's also called.


{{ngDoCheck.sourceCode.childComponent.name}}Full Code


Clearly, if you decide to implement your logic in there, make sure implementation must be very lightweight or the user experience may suffer.


ngAfterContent

The ngAfterContentInit and ngAfterContentChecked hooks that Angular calls after Angular projects external content into the component.

Angular calls both ngAfterContent hooks before calling either of the ngAfterView hooks.


The hooks take action based on changing values in a content child which we can only reach by querying for it via ContentChild.

The ngAfterContent hooks concern ContentChildren, the child components that Angular projected into the component.


Using ng-content is a way to import Html from outside the component and insert content into component's template in a designated spot.


I have an exemple with childComponent which use ng-content like this.


{{ngAfterContent.sourceCode.childComponent.name}}Full Code

In exampleComponent I've' projected titleComponent and itemComponent into childComponent like this.


{{ngAfterContent.sourceCode.exampleComponent.name}}Full Code

So you can see result in the below image, I've queried instances of titleComponent & itemComponent.



Notice that, Angular completes composition of the projected content before finishing the composition of this component's view.

We still have a window of opportunity to modify that view.


ngAfterView

The ngAfterViewInit and ngAfterViewChecked execute after initializing the component's views and child views.


The hooks take action based on changing values within the child view which we can only reach by querying for the child view via ViewChild.

The AfterView hooks concern ViewChildren, the child components whose element tags appear within the component's template.


Have a look at exampleComponent & the result below.


{{ngAfterView.sourceCode.exampleComponent.name}}Full Code


Do you see I used setTimeout() in the example ?

If you try to update component's data-bound property immediately instead of using setTimeout, Angular throws an error.


Notice that we must adhere to Angular's unidirectional data flow rule which says that we may not update the view after it has been composed.

Both hooks fire after the component's view has been composed.


For ngAfterViewChecked, Angular frequently calls it, even when there are no changes of interest. Write lean hook methods to avoid performance problems.


ngOnDestroy

This hook run just before Angular destroys the directive/component.

This is the place to free resources that won't be garbage collected automatically such as unsubscribe from observables and DOM events, stop interval timers etc.


", host: { '[class.xblog-article-1473861890]': 'true' } @@ -18,13 +16,11 @@ export var article1473861890Component = Component({ .Class({ constructor: [ DomSanitizer, - cmsArticleService, xblogTableContentService, - function (sanitizer, articleService, tableContentService){ + function (sanitizer, tableContentService){ this.id = 1473861890; this.sanitizer = sanitizer; - this.articleService = articleService; this.tableContentService = tableContentService; } ], @@ -45,7 +41,7 @@ export var article1473861890Component = Component({ this.ngOnChanges = { sourceCode: { exampleComponent: { - name: 'example.component.js', + name: 'ngOnChanges', link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-on-changes/example.component.js') } }, @@ -53,14 +49,14 @@ export var article1473861890Component = Component({ 1: resourceUtils.getImg('ngOnChanges-example-1473861890.png') }, codeBlocks: { - 1: this.getCodeBlock('ng-on-changes.html') + 1: this.getCodeBlock(getNgOnChanges) } }; this.ngOnInit = { sourceCode: { childComponent: { - name: 'child.component.js', + name: 'ngOnInit', link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-on-init/child.component.js') } }, @@ -68,14 +64,14 @@ export var article1473861890Component = Component({ 1: resourceUtils.getImg('ngOnInit-example-1473861890.png') }, codeBlocks: { - 1: this.getCodeBlock('ng-on-init.html') + 1: this.getCodeBlock(getNgOnInit) } }; this.ngDoCheck = { sourceCode: { childComponent: { - name: 'child.component.js', + name: 'ngDoCheck', link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-do-check/child.component.js') } }, @@ -83,14 +79,14 @@ export var article1473861890Component = Component({ 1: resourceUtils.getImg('ngDoCheck-example-1473861890.png') }, codeBlocks: { - 1: this.getCodeBlock('ng-do-check.html') + 1: this.getCodeBlock(getNgDoCheck) } }; this.ngAfterContent = { sourceCode: { childComponent: { - name: 'child.component.js', + name: 'ngAfterContent', link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-after-content/child.component.js') }, exampleComponent: { @@ -102,15 +98,15 @@ export var article1473861890Component = Component({ 1: resourceUtils.getImg('ngAfterContent-example-1473861890.png') }, codeBlocks: { - 1: this.getCodeBlock('ng-after-content-1.html'), - 2: this.getCodeBlock('ng-after-content-2.html') + 1: this.getCodeBlock(getNgAfterContent01), + 2: this.getCodeBlock(getNgAfterContent02) } }; this.ngAfterView = { sourceCode: { exampleComponent: { - name: 'example.component.js', + name: 'ngAfterView', link: resourceUtils.getGithubArticleFileLink(this.id, 'ng-after-view/example.component.js') } }, @@ -118,17 +114,228 @@ export var article1473861890Component = Component({ 1: resourceUtils.getImg('ngAfterView-example-1473861890.png') }, codeBlocks: { - 1: this.getCodeBlock('ng-after-view.html') + 1: this.getCodeBlock(getNgAfterView) } }; }, - getCodeBlock: function(fileName, lang) { + getCodeBlock: function(getter, lang) { var _langs = lang ? [ lang ] : ['javascript', 'html', 'css']; - var _codeBlock = this.articleService.getCodeBlock(this.id, fileName); - _codeBlock = highlight.highlightAuto(_codeBlock, _langs).value; + var _codeBlock = highlight.highlightAuto(getter().replace('\n', '').replace(/^ /gm, ''), _langs).value; return this.sanitizer.bypassSecurityTrustHtml(_codeBlock); } }); + +function getNgOnChanges(){ + return ` + import * as ngCore from '@angular/core'; + + import { childComponent } from './child.component'; + + export var ngOnChangesComponent = ngCore.Component({ + selector: 'my-example', + template: '', + directives: [ childComponent ] + }) + .Class({ + constructor: function(){}, + + ngOnInit: function() { + this.title = 'ngOnChanges'; + this.model = { content: 'This is content of ngOnChanges' }; + + var _self = this; + setTimeout(function(){ + _self.title = 'ngOnChanges updated'; + _self.model.content = 'This is content of ngOnChanges'; + }, 3 * 1000); + } + });`; +} + +function getNgOnInit(){ + return ` + import * as ngCore from '@angular/core'; + + export var childComponent = ngCore.Component({ + selector: 'my-child', + template: [ + '

{{title}}

', + '

{{model.content}}

' + ].join(''), + properties: ['title', 'model'] + }) + .Class({ + constructor: function(){ + console.log(this.title); + console.log(this.model); + }, + + ngOnInit: function(){ + console.log(this.title); + console.log(this.model); + } + });`; +} + +function getNgDoCheck(){ + return ` + import * as ngCore from '@angular/core'; + + export var childComponent = ngCore.Component({ + selector: 'my-child', + template: [ + '
', + '

ngDoCheck Example

', + 'Title: ', + '
' + ].join(''), + properties: ['title'] + }) + .Class({ + constructor: function(){}, + + ngOnInit: function(){ + this.model = { }; + this.model.title = this.currentTitle = this.title; + this.noChangeCount = 0; + this.changeDetected = null; + }, + + ngDoCheck: function(){ + if (this.model.title !== this.currentTitle) { + this.changeDetected = true; + + console.log('ngDoCheck: Title changed to ' + this.model.title + ' from ' + this.currentTitle); + + this.currentTitle = this.model.title; + } + + if (this.changeDetected) { this.noChangeCount = 0; } + else if (this.changeDetected === false) { + this.noChangeCount++; + console.log('ngDoCheck: called ' + this.noChangeCount + 'x when no change to title'); + } + + this.changeDetected = false; + } + });`; +} + +function getNgAfterContent01(){ + return ` + import * as ngCore from '@angular/core'; + + import { titleComponent } from './title.component'; + import { itemComponent } from './item.component'; + + export var childComponent = ngCore.Component({ + selector: 'my-child', + template: '', + queries: { + title: new ngCore.ContentChild(titleComponent), + items: new ngCore.ContentChildren(itemComponent) + } + }) + .Class({ + constructor: function(){}, + + ngAfterContentInit: function(){ + //title & items will be available since there + console.log('title', this.title); + console.log('items', this.items); + }, + + ngAfterContentChecked: function(){ + // If there're changes to contentChild + // contentChild is updated at there after the content has been checked + // This event is fired after every check of projected component content + } + });`; +} + +function getNgAfterContent02(){ + return ` + import * as ngCore from '@angular/core'; + + import { childComponent } from './child.component'; + import { titleComponent } from './title.component'; + import { itemComponent } from './item.component'; + + export var ngAfterContentComponent = ngCore.Component({ + selector: 'my-example', + template: [ + '', + '', + '', + '' + ].join(''), + directives: [ + childComponent, + titleComponent, + itemComponent + ] + }) + .Class({ + constructor: function(){}, + + ngOnInit: function() { + this.title = 'ngAfterContent'; + this.items = [ + { id: 1, name: 'item 01' }, + { id: 2, name: 'item 02' } + ]; + } + });`; +} + +function getNgAfterView(){ + return ` + import * as ngCore from '@angular/core'; + + import { childComponent } from './child.component'; + + export var ngAfterViewComponent = ngCore.Component({ + selector: 'my-example', + template: [ + '

', + '', + '
ngAfterViewChecked is fired: {{noChangeCount}}x
' + ].join(''), + directives: [ childComponent ], + queries: { + title: new ngCore.ViewChild('title', { read: ngCore.ElementRef }), + childs: new ngCore.ViewChildren(childComponent) + } + }) + .Class({ + constructor: function(){}, + + ngOnInit: function() { + this.items = [ + { id: 1, name: 'item 01' }, + { id: 2, name: 'item 02' } + ]; + this.noChangeCount = 0; + }, + + ngAfterViewInit: function(){ + //title & childs will be available since there + this.title.nativeElement.innerHTML = 'ngAfterView'; + console.log('title', this.title.nativeElement); + console.log('childs', this.items); + }, + + ngAfterViewChecked: function(){ + // If there're changes to ViewChild + // ViewChild is updated at there after the view has been checked + // This event is fired after every check of the component's views and child views. + var _self = this; + setTimeout(function(){ + if(!_self.noChangeCount){ _self.noChangeCount++; } + }); + } + });`; +} \ No newline at end of file diff --git a/cms/articles/1473861890/code-blocks/ng-after-content-1.html b/cms/articles/1473861890/code-blocks/ng-after-content-1.html deleted file mode 100644 index bc2584a..0000000 --- a/cms/articles/1473861890/code-blocks/ng-after-content-1.html +++ /dev/null @@ -1,28 +0,0 @@ -import * as ngCore from '@angular/core'; - -import { titleComponent } from './title.component'; -import { itemComponent } from './item.component'; - -export var childComponent = ngCore.Component({ - selector: 'my-child', - template: '', - queries: { - title: new ngCore.ContentChild(titleComponent), - items: new ngCore.ContentChildren(itemComponent) - } -}) -.Class({ - constructor: function(){}, - - ngAfterContentInit: function(){ - //title & items will be available since there - console.log('title', this.title); - console.log('items', this.items); - }, - - ngAfterContentChecked: function(){ - // If there're changes to contentChild - // contentChild is updated at there after the content has been checked - // This event is fired after every check of projected component content - } -}); \ No newline at end of file diff --git a/cms/articles/1473861890/code-blocks/ng-after-content-2.html b/cms/articles/1473861890/code-blocks/ng-after-content-2.html deleted file mode 100644 index 6af2388..0000000 --- a/cms/articles/1473861890/code-blocks/ng-after-content-2.html +++ /dev/null @@ -1,31 +0,0 @@ -import * as ngCore from '@angular/core'; - -import { childComponent } from './child.component'; -import { titleComponent } from './title.component'; -import { itemComponent } from './item.component'; - -export var ngAfterContentComponent = ngCore.Component({ - selector: 'my-example', - template: [ - '', - '', - '', - '' - ].join(''), - directives: [ - childComponent, - titleComponent, - itemComponent - ] -}) -.Class({ - constructor: function(){}, - - ngOnInit: function() { - this.title = 'ngAfterContent'; - this.items = [ - { id: 1, name: 'item 01' }, - { id: 2, name: 'item 02' } - ]; - } -}); \ No newline at end of file diff --git a/cms/articles/1473861890/code-blocks/ng-after-view.html b/cms/articles/1473861890/code-blocks/ng-after-view.html deleted file mode 100644 index 6451cea..0000000 --- a/cms/articles/1473861890/code-blocks/ng-after-view.html +++ /dev/null @@ -1,45 +0,0 @@ -import * as ngCore from '@angular/core'; - -import { childComponent } from './child.component'; - -export var ngAfterViewComponent = ngCore.Component({ - selector: 'my-example', - template: [ - '

', - '', - '
ngAfterViewChecked is fired: {{noChangeCount}}x
' - ].join(''), - directives: [ childComponent ], - queries: { - title: new ngCore.ViewChild('title', { read: ngCore.ElementRef }), - childs: new ngCore.ViewChildren(childComponent) - } -}) -.Class({ - constructor: function(){}, - - ngOnInit: function() { - this.items = [ - { id: 1, name: 'item 01' }, - { id: 2, name: 'item 02' } - ]; - this.noChangeCount = 0; - }, - - ngAfterViewInit: function(){ - //title & childs will be available since there - this.title.nativeElement.innerHTML = 'ngAfterView'; - console.log('title', this.title.nativeElement); - console.log('childs', this.items); - }, - - ngAfterViewChecked: function(){ - // If there're changes to ViewChild - // ViewChild is updated at there after the view has been checked - // This event is fired after every check of the component's views and child views. - var _self = this; - setTimeout(function(){ - if(!_self.noChangeCount){ _self.noChangeCount++; } - }); - } -}); \ No newline at end of file diff --git a/cms/articles/1473861890/code-blocks/ng-do-check.html b/cms/articles/1473861890/code-blocks/ng-do-check.html deleted file mode 100644 index ad5fb91..0000000 --- a/cms/articles/1473861890/code-blocks/ng-do-check.html +++ /dev/null @@ -1,40 +0,0 @@ -import * as ngCore from '@angular/core'; - -export var childComponent = ngCore.Component({ - selector: 'my-child', - template: [ - '
', - '

ngDoCheck Example

', - 'Title: ', - '
' - ].join(''), - properties: ['title'] -}) -.Class({ - constructor: function(){}, - - ngOnInit: function(){ - this.model = { }; - this.model.title = this.currentTitle = this.title; - this.noChangeCount = 0; - this.changeDetected = null; - }, - - ngDoCheck: function(){ - if (this.model.title !== this.currentTitle) { - this.changeDetected = true; - - console.log('ngDoCheck: Title changed to ' + this.model.title + ' from ' + this.currentTitle); - - this.currentTitle = this.model.title; - } - - if (this.changeDetected) { this.noChangeCount = 0; } - else if (this.changeDetected === false) { - this.noChangeCount++; - console.log('ngDoCheck: called ' + this.noChangeCount + 'x when no change to title'); - } - - this.changeDetected = false; - } -}); \ No newline at end of file diff --git a/cms/articles/1473861890/code-blocks/ng-on-changes.html b/cms/articles/1473861890/code-blocks/ng-on-changes.html deleted file mode 100644 index 0fdfabf..0000000 --- a/cms/articles/1473861890/code-blocks/ng-on-changes.html +++ /dev/null @@ -1,23 +0,0 @@ -import * as ngCore from '@angular/core'; - -import { childComponent } from './child.component'; - -export var ngOnChangesComponent = ngCore.Component({ - selector: 'my-example', - template: '', - directives: [ childComponent ] -}) -.Class({ - constructor: function(){}, - - ngOnInit: function() { - this.title = 'ngOnChanges'; - this.model = { content: 'This is content of ngOnChanges' }; - - var _self = this; - setTimeout(function(){ - _self.title = 'ngOnChanges updated'; - _self.model.content = 'This is content of ngOnChanges'; - }, 3 * 1000); - } -}); \ No newline at end of file diff --git a/cms/articles/1473861890/code-blocks/ng-on-init.html b/cms/articles/1473861890/code-blocks/ng-on-init.html deleted file mode 100644 index c974ea3..0000000 --- a/cms/articles/1473861890/code-blocks/ng-on-init.html +++ /dev/null @@ -1,21 +0,0 @@ -import * as ngCore from '@angular/core'; - -export var childComponent = ngCore.Component({ - selector: 'my-child', - template: [ - '

{{title}}

', - '

{{model.content}}

' - ].join(''), - properties: ['title', 'model'] -}) -.Class({ - constructor: function(){ - console.log(this.title); - console.log(this.model); - }, - - ngOnInit: function(){ - console.log(this.title); - console.log(this.model); - } -}); \ No newline at end of file diff --git a/cms/articles/1473861890/index.js b/cms/articles/1473861890/index.js index a91be96..5de551c 100644 --- a/cms/articles/1473861890/index.js +++ b/cms/articles/1473861890/index.js @@ -3,11 +3,11 @@ import { article1473861890Component } from './article-1473861890.component'; export var article1473861890 = { id: 1473861890, - title: 'Component Lifecycle', + title: 'Component Lifecycle In Angular 2', postedDate: 'Wed Sep 14 2016 21:04:49 GMT+0700 (SE Asia Standard Time)', author: 'Minh Van', cover: resourceUtils.getImg('xblog-home-cover.jpg'), - routeLink: resourceUtils.getArticleRouteLink('component-lifecycle-1473861890.html'), + routeLink: resourceUtils.getArticleRouteLink('component-lifecycle-in-angular-2-1473861890.html'), relatedArticles: [], tags: [], description: 'A component has a lifecycle managed by Angular itself. Angular offers component lifecycle hooks that give us the ability to act when they occur.', diff --git a/cms/articles/1473861890/templates/article-1473861890.html b/cms/articles/1473861890/templates/article-1473861890.html index 9d5949d..454f22d 100644 --- a/cms/articles/1473861890/templates/article-1473861890.html +++ b/cms/articles/1473861890/templates/article-1473861890.html @@ -83,7 +83,7 @@
Table of Contents

ngOnChanges

This hook method executes before ngOnInit and when a data-bound input property value changes.

-

The method receives a object of current and previous values, I call it is changeRecord

+

The method receives a object of current and previous values, I call it is changeRecord.


For example, I have ngOnChangesComponent as below.


@@ -96,26 +96,26 @@

ngOnChanges


There're 2 binding, title is a primitive value, model is an object.

Because I bound data to childComponent so after its constructor executed, its ngOnChanges will be fired.

-

3 seconds later, its ngOnChanges fires one more time because I've changed data-bound property values

+

3 seconds later, its ngOnChanges fires one more time because I've changed data-bound property values.

As you see the below image, although ngOnChanges fires twice, but its changeRecord is not same.

-

In the second changes, changeRecord only contains current and previous values of title

+

In the second changes, changeRecord only contains current and previous values of title.

The value of model property is the reference to the object. Angular doesn't care if any its property's value changed.

If you really want Angular to fire ngOnChanges for every changes of model. Immutable will be a solution for you.



ngOnInit

-

This hook method executes after the first ngOnChanges

+

This hook method executes after the first ngOnChanges.

We turn to ngOnInit for 2 reasons:


-

- To perform complex initializations shortly after construction

-

- To set up the component after Angular sets the input properties

+

- To perform complex initializations shortly after construction.

+

- To set up the component after Angular sets the input properties.


Why shouldn't we fetch data from server in the constructor ? Because data-bound input properties only are set after construction.

If you fetch data with params which base on values of input properties, make sure you will get errors.

The constructor should do no more than set the initial local variables to simple values.


-

Look at the example with childComponent

+

Look at the example with childComponent.


{{ngOnInit.sourceCode.childComponent.name}} @@ -148,7 +148,7 @@

ngAfterContent

The ngAfterContentInit and ngAfterContentChecked hooks that Angular calls after Angular projects external content into the component.

Angular calls both ngAfterContent hooks before calling either of the ngAfterView hooks.


-

The hooks take action based on changing values in a content child which we can only reach by querying for it via ContentChild

+

The hooks take action based on changing values in a content child which we can only reach by querying for it via ContentChild.

The ngAfterContent hooks concern ContentChildren, the child components that Angular projected into the component.


Using ng-content is a way to import Html from outside the component and insert content into component's template in a designated spot.

@@ -171,7 +171,7 @@

ngAfterContent



-

So you can see result in the below image, I've queried instances of titleComponent & itemComponent

+

So you can see result in the below image, I've queried instances of titleComponent & itemComponent.



@@ -181,7 +181,7 @@

ngAfterContent

ngAfterView

The ngAfterViewInit and ngAfterViewChecked execute after initializing the component's views and child views.


-

The hooks take action based on changing values within the child view which we can only reach by querying for the child view via ViewChild

+

The hooks take action based on changing values within the child view which we can only reach by querying for the child view via ViewChild.

The AfterView hooks concern ViewChildren, the child components whose element tags appear within the component's template.


Have a look at exampleComponent & the result below.

@@ -205,4 +205,5 @@

ngAfterView


ngOnDestroy

This hook run just before Angular destroys the directive/component.

-

This is the place to free resources that won't be garbage collected automatically such as unsubscribe from observables and DOM events, stop interval timers etc.

\ No newline at end of file +

This is the place to free resources that won't be garbage collected automatically such as unsubscribe from observables and DOM events, stop interval timers etc.

+
\ No newline at end of file