46
ANGULAR 2 CORE CONCEPTS FABIO BIONDI / MATTEO RONCHI 2 unshift.xyz

Angular 2 - Core Concepts

Embed Size (px)

Citation preview

Page 1: Angular 2 - Core Concepts

ANGULAR 2 CORE CONCEPTSFABIO BIONDI / MATTEO RONCHI2

unshift.xyz

Page 2: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

FABIOBIONDIUI Developer and Trainer

Sviluppo, formazione e consulenza su AngularJS, React, CreateJS, D3.js e diverse librerie Javascript.

fabiobiondi.com

Page 3: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

MATTEORONCHISenior Software Engineer

Appassionato di architetture e ottimizzazioni da poco aggiunto al team di Workwave

@cef62

Page 5: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

• Goodbye $scope

• No more controllers

• Component Based-UI

• 1-way data flow

• ES6 / Typescript

• New built-in directives

ANGULAR 2 VS 1.X

Page 6: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

• New DI system

• Performance

• Better Mobile Support

• Server side render e Native Script

• Embrace Flux and RxJS

• Change Detection System

ANGULAR 2 VS 1.X

Page 7: Angular 2 - Core Concepts

COMPONENTFUNDAMENTALS

Page 8: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

Imports

Component Name

selector name <tab-bar/>

Component Decorator

template

Page 9: Angular 2 - Core Concepts

CREATE A WIDGET

Page 10: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

<widget />

<tab-bar />

<map />

Open Plnkr

Page 11: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

Country.ts (model)

Automatically generates class properties

Page 12: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

Component Injection

<widget/> (partial)

Component Name

Selector <widget/>

Page 13: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

INPUT PROP

OUTPUT EVENT

INPUT PROP

<widget/> (partial)

Page 14: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

<widget/> (completed)

1

2

3

Page 15: Angular 2 - Core Concepts

<map [item]="country">

[…]INPUT PROPERTY

MAP COMPONENT

Page 16: Angular 2 - Core Concepts

ANGULAR 2 CORE CONCEPT2<map/>

Input property item:Country

Template Binding

Page 17: Angular 2 - Core Concepts

<tab-bar [data]="list" (onTabSelect)="doIt($event)">

[…]INPUT PROPERTY

(…)OUTPUT EVENT

TABBARCOMPONENT

Page 18: Angular 2 - Core Concepts

ANGULAR 2 CORE CONCEPT2

1/2

<tab-bar/>

FRAMEWORKDIRECTIVES

ngFor,ngClass

Page 19: Angular 2 - Core Concepts

ANGULAR 2 CORE CONCEPT2

ASSIGN EMITTER

EMIT EVENT

2/2

<tab-bar/>

CURRENT TAB

Page 20: Angular 2 - Core Concepts

ANGULARBOOSTRAPng.bootstrap(src.Widget)

Page 21: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

1. LOAD LIBRARIES

1/2

Page 22: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

2. Configure System.js

3. Bootstrap

2/2

4. DISPLAY <widget/>

Page 23: Angular 2 - Core Concepts

DEPENDENCY INJECTION

Page 24: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

• @injectable to enable injection to services • Support multiple providers • Application level injections • Component level injections

NEW DEPENDENCY INJECTION ENGINE

Page 25: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

import { SubComp } from `./sub-comp` import { MyHelper } from `./my-helper`

@Component({ template: `<sub-comp></sub-comp>` directives: [SubComp]

}) class MyComp {

constructor(private helper: MyHelper) {} }

Page 26: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

Simple Service

export class MyService {

getData() { return loadData.load(); } }

Page 27: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

import {Injectable} from ‘angular2/core’;

@Injectable() export class MyService {

constructor(public loadData:LoadData) {}

getData() { return loadData.load(); } }

Inject Service to a Service

Page 28: Angular 2 - Core Concepts

COMPONENT LIFECYCLE

Page 29: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

“ Angular only calls a directive/component hook method if it is defined. “ [docs]

Page 30: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

BASE HOOKS (components & directives)

ngOnChanges input property value changes

ngOnInit Initialization step

ngDoCheck every change detection cycle

ngOnDestroy before destruction

Page 31: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

@Directive({selector: '[my-spy]'}) class Spy implements OnInit, OnDestroy { ngOnInit() {

console.log(`onInit`); }

ngOnDestroy() { console.log(`onDestroy`);

} }

Usage: <div my-spy>...</div>

Page 32: Angular 2 - Core Concepts

CHANGE DETECTION

Page 33: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

Angular Application are Data Driven

Data Model Components

Page 34: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

DATA CHANGES -> VIEW UPDATES

Data Model Components

Page 35: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

CHANGE DETECTION TRAVELS TOP TO BOTTOM

CD

CD CD

CD CD CD

CD CD Chan

ge D

etec

tion

Flow

Page 36: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

CHANGE DETECTION IS DEFINED AT COMPONENT LEVEL

Page 37: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

CHANGE DETECTION CAN SHOULD BE OPTIMIZED

• Immutable Data

• Observable

• Custom BUS Systems …

Page 38: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

@Component({ template: `

<h1>{{user.name}}</h1> <h3>{{user.nickName}}</h3> `,

changeDetection: ChangeDetectionStrategy.OnPush inputs: [user]

}) class MyComp {}

Enable Smart Change Detection

Page 39: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

CHANGE DETECTION WITH IMMUTABLE DATA

CD

CD

CD CD

CD CD Chan

ge D

etec

tion

Flow

Page 40: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

@Component({ template: `

<h1>{{user.name}}</h1> <h3>{{user.nickName}}</h3> `,

changeDetection: ChangeDetectionStrategy.OnPush }) class MyComp {

@Input() user$:Observable<User>; constructor(private detector: ChangeDetectorRef) {}

ngOnInit() { this.user$.subscribe((user) => {

this.user = user; this.detector.markForCheck();

}) }

}

Change Detection with Observable

Page 41: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

CHANGE DETECTION WITH OBSERVABLES

CD

CD

CD

CDChan

ge D

etec

tion

Flow

Page 42: Angular 2 - Core Concepts

WHAT CAUSE CHANGE DETECTION

Page 43: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

• setTimeout(), setInterval()• User Events (click, input change..)• XHR Requests

Page 44: Angular 2 - Core Concepts

GET IN THE ZONE

Page 45: Angular 2 - Core Concepts

2 ANGULAR 2 CORE CONCEPTS

ZONE.JS INTERCEPTS ALL ASYNC OPERATIONS

Angular has its own NgZone to controls Change Detections

Page 46: Angular 2 - Core Concepts

THANKS!

MATTEO RONCHI / @cef62FABIO BIONDI / fabiobiondi.com