Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

2 ANGULAR 2 CORE CONCEPTS FABIOBIONDI UI Developer and Trainer Sviluppo, formazione e consulenza su AngularJS, React, CreateJS, D3.js e diverse librerie Javascript. fabiobiondi.com

Slide 3

Slide 3 text

2 ANGULAR 2 CORE CONCEPTS MATTEORONCHI Senior Software Engineer Appassionato di architetture e ottimizzazioni da poco aggiunto al team di Workwave @cef62

Slide 4

Slide 4 text

ANGULARCOMMUNITIES AngularJS Italia AngularJS Developer Italiani

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

COMPONENTFUNDAMENTALS

Slide 8

Slide 8 text

2 ANGULAR 2 CORE CONCEPTS Imports Component Name selector name Component Decorator template

Slide 9

Slide 9 text

COMPONENT COMMUNICATION

Slide 10

Slide 10 text

2 ANGULAR 2 CORE CONCEPTS Open Plnkr

Slide 11

Slide 11 text

2 ANGULAR 2 CORE CONCEPTS Country Model AUTOMATICALLY GENERATES
 CLASS PROPERTIES

Slide 12

Slide 12 text

2 ANGULAR 2 CORE CONCEPTS COMPONENT 
 INJECTION MODEL INPUT PROP OUTPUT EVENT

Slide 13

Slide 13 text

[…]
 INPUT PROPERTY MAP COMPONENT

Slide 14

Slide 14 text

ANGULAR 2 CORE CONCEPT 2 Input property item:Country
 Template Binding

Slide 15

Slide 15 text

[…]
 INPUT PROPERTY (…)
 OUTPUT EVENT TABBARCOMPONENT

Slide 16

Slide 16 text

ANGULAR 2 CORE CONCEPT 2 ANGULAR 2 Built-in DIRECTIVES ngFor,ngClass CLICK EVENT INPUT PROPS OUTPUT EVENTS 1/2

Slide 17

Slide 17 text

ANGULAR 2 CORE CONCEPT 2 OUTPUT EVENT EMIT EVENT 2/2 Emitter

Slide 18

Slide 18 text

ANGULARBOOSTRAP ng.bootstrap(src.Widget)

Slide 19

Slide 19 text

2 ANGULAR 2 CORE CONCEPTS 1. LOAD LIBRARIES 1/2

Slide 20

Slide 20 text

2 ANGULAR 2 CORE CONCEPTS 2. Configure System.js 4. DISPLAY 3. Bootstrap 2/2

Slide 21

Slide 21 text

DEPENDENCY INJECTION

Slide 22

Slide 22 text

2 ANGULAR 2 CORE CONCEPTS • @injectable to enable injection to services • Support multiple providers • Application level injections • Component level injections NEW DEPENDENCY INJECTION ENGINE

Slide 23

Slide 23 text

2 ANGULAR 2 CORE CONCEPTS import  {  SubComp  }  from  `./sub-­‐comp`   import  {  MyHelper  }  from  `./my-­‐helper`   @Component({     template:  ``   directives:  [SubComp]   })     class  MyComp  {   constructor(private  helper:  MyHelper)  {}   }

Slide 24

Slide 24 text

2 ANGULAR 2 CORE CONCEPTS Simple Service export  class  MyService  {      getData()  {          return  loadData.load();      }   }

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

COMPONENT LIFECYCLE

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

2 ANGULAR 2 CORE CONCEPTS @Directive({selector:  '[my-­‐spy]'})   class  Spy  implements  OnInit,  OnDestroy  {      ngOnInit()  {   console.log(`onInit`);   }      ngOnDestroy()  {   console.log(`onDestroy`);   }   } Usage:  
...

Slide 30

Slide 30 text

CHANGE DETECTION

Slide 31

Slide 31 text

2 ANGULAR 2 CORE CONCEPTS Angular Application are Data Driven Data Model Components

Slide 32

Slide 32 text

2 ANGULAR 2 CORE CONCEPTS DATA CHANGES -> VIEW UPDATES Data Model Components

Slide 33

Slide 33 text

2 ANGULAR 2 CORE CONCEPTS CHANGE DETECTION TRAVELS TOP TO BOTTOM CD CD CD CD CD CD CD CD Change Detection Flow

Slide 34

Slide 34 text

2 ANGULAR 2 CORE CONCEPTS CHANGE DETECTION IS DEFINED AT COMPONENT LEVEL

Slide 35

Slide 35 text

2 ANGULAR 2 CORE CONCEPTS CHANGE DETECTION CAN SHOULD BE OPTIMIZED • Immutable Data • Observable • Custom BUS Systems …

Slide 36

Slide 36 text

2 ANGULAR 2 CORE CONCEPTS @Component({     template:  `    

{{user.name}}

   

{{user.nickName}}

 `,     changeDetection:  ChangeDetectionStrategy.OnPush   inputs:  [user]   })     class  MyComp  {}   Enable Smart Change Detection

Slide 37

Slide 37 text

2 ANGULAR 2 CORE CONCEPTS CHANGE DETECTION WITH IMMUTABLE DATA CD CD CD CD CD CD Change Detection Flow

Slide 38

Slide 38 text

2 ANGULAR 2 CORE CONCEPTS @Component({     template:  `    

{{user.name}}

   

{{user.nickName}}

 `,     changeDetection:  ChangeDetectionStrategy.OnPush   })     class  MyComp  {   @Input()  user$:Observable;     constructor(private  detector:  ChangeDetectorRef)  {}     ngOnInit()  {   this.user$.subscribe((user)  =>  {     this.user  =  user;   this.detector.markForCheck();     })     }     } Change Detection with Observable

Slide 39

Slide 39 text

2 ANGULAR 2 CORE CONCEPTS CHANGE DETECTION WITH OBSERVABLES CD CD CD CD Change Detection Flow

Slide 40

Slide 40 text

WHAT CAUSE CHANGE DETECTION

Slide 41

Slide 41 text

2 ANGULAR 2 CORE CONCEPTS • setTimeout(), setInterval() • User Events (click, input change..) • XHR Requests

Slide 42

Slide 42 text

GET IN THE ZONE

Slide 43

Slide 43 text

2 ANGULAR 2 CORE CONCEPTS ZONE.JS INTERCEPTS ALL ASYNC OPERATIONS Angular has its own NgZone to controls Change Detections

Slide 44

Slide 44 text

THANKS! MATTEO RONCHI / @cef62 FABIO BIONDI / fabiobiondi.com