building universal applications with angular 2

119
Building Universal Applications with Angular 2 Minko Gechev github.com/mgechev twitter.com/mgechev blog.mgechev.com

Upload: minko-gechev

Post on 16-Apr-2017

4.104 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Building Universal Applications with Angular 2

Building Universal Applications with

Angular 2Minko Gechev

github.com/mgechev twitter.com/mgechev blog.mgechev.com

Page 2: Building Universal Applications with Angular 2

github.com/mgechev twitter.com/mgechev blog.mgechev.com

Page 3: Building Universal Applications with Angular 2

AgendaWhat is Angular?

What’s wrong with Angular 2?Introduction to Angular 2

Why Angular 2 is awesome?Should I use Angular 2 in my next project?

Page 4: Building Universal Applications with Angular 2

AgendaWhat is Angular 2?

What’s wrong with Angular 2?What are the core concepts of Angular 2?

Why Angular 2 is awesome?Should I use Angular 2 in my next project?

Page 5: Building Universal Applications with Angular 2

AgendaWhat is Angular 2?

What’s wrong with Angular 2?What are the core concepts of Angular 2?

Why Angular 2 is awesome?Should I use Angular 2 in my next project?

Page 6: Building Universal Applications with Angular 2

AgendaWhat is Angular 2?

What’s wrong with Angular 2?What are the core concepts of Angular 2?

Why Angular 2 is awesome?Should I use Angular 2 in my next project?

Page 7: Building Universal Applications with Angular 2

AgendaWhat is Angular 2?

What’s wrong with Angular 2?What are the core concepts of Angular 2?

Why Angular 2 is awesome?Should I use Angular 2 in my next project?

Page 8: Building Universal Applications with Angular 2

AgendaWhat is Angular 2?

What’s wrong with Angular 2?What are the core concepts of Angular 2?

Why Angular 2 is awesome?Should I use Angular 2 in my next project?

Page 9: Building Universal Applications with Angular 2

What is Angular 2?

Page 10: Building Universal Applications with Angular 2
Page 11: Building Universal Applications with Angular 2
Page 12: Building Universal Applications with Angular 2

Core concepts of Angular 2• Directives • Components • Pipes • Services • Dependency Injection

Page 13: Building Universal Applications with Angular 2

Directives

Page 14: Building Universal Applications with Angular 2

Primitive used for encapsulation of

basic UI related logic

Page 15: Building Universal Applications with Angular 2

tooltip.ts@Directive({ selector: '[tooltip]', inputs: ['tooltip'], host: { '(mouseenter)': 'onMouseEnter()', '(mouseleave)': 'onMouseLeave()' } }) export class Tooltip { private overlay:Overlay; private tooltip:string; constructor(private el:ElementRef, manager: OverlayManager) { this.el = el; this.overlay = manager.get(); } onMouseEnter() { this.overlay.open(this.el, this.tooltip); } onMouseLeave() { this.overlay.close(); } }

Page 16: Building Universal Applications with Angular 2

tooltip.ts@Directive({ selector: '[tooltip]', inputs: ['tooltip'], host: { '(mouseenter)': 'onMouseEnter()', '(mouseleave)': 'onMouseLeave()' } }) export class Tooltip { private overlay:Overlay; private tooltip:string; constructor(private el:ElementRef, manager: OverlayManager) { this.el = el; this.overlay = manager.get(); } onMouseEnter() { this.overlay.open(this.el, this.tooltip); } onMouseLeave() { this.overlay.close(); } }

Page 17: Building Universal Applications with Angular 2

tooltip.ts@Directive({ selector: '[tooltip]', inputs: ['tooltip'], host: { '(mouseenter)': 'onMouseEnter()', '(mouseleave)': 'onMouseLeave()' } }) export class Tooltip { private overlay:Overlay; private tooltip:string; constructor(private el:ElementRef, manager: OverlayManager) { this.el = el; this.overlay = manager.get(); } onMouseEnter() { this.overlay.open(this.el, this.tooltip); } onMouseLeave() { this.overlay.close(); } }

Page 18: Building Universal Applications with Angular 2

What a minute…

this looks like Java

Page 19: Building Universal Applications with Angular 2

Angular 2 is written in

TypeScript

Page 20: Building Universal Applications with Angular 2
Page 21: Building Universal Applications with Angular 2
Page 22: Building Universal Applications with Angular 2

TypeScript is…

Page 23: Building Universal Applications with Angular 2

superset of ECMAScript

Page 24: Building Universal Applications with Angular 2

optional type

checking

Page 25: Building Universal Applications with Angular 2

open source

Page 26: Building Universal Applications with Angular 2
Page 27: Building Universal Applications with Angular 2

…you can still use ES5…

Page 28: Building Universal Applications with Angular 2

tooltip.jsvar Tooltip = ng.Directive({ selector: '[tooltip]', inputs: ['tooltip'], host: { '(mouseenter)': 'onMouseEnter()', '(mouseleave)': 'onMouseLeave()' } }) .Class({ constructor: [ng.Inject(ng.ElementRef), ng.Inject(OverlayManager), function (tooltip, el, manager) { this.el = el; this.overlay = manager.get(tooltip); }], onMouseEnter() { this.overlay.open(this.el, this.tooltip); }, onMouseLeave() { this.overlay.close(); } });

Page 29: Building Universal Applications with Angular 2

tooltip.jsvar Tooltip = ng.Directive({ selector: '[tooltip]', inputs: ['tooltip'], host: { '(mouseenter)': 'onMouseEnter()', '(mouseleave)': 'onMouseLeave()' } }) .Class({ constructor: [ng.Inject(ng.ElementRef), ng.Inject(OverlayManager), function (tooltip, el, manager) { this.el = el; this.overlay = manager.get(tooltip); }], onMouseEnter() { this.overlay.open(this.el, this.tooltip); }, onMouseLeave() { this.overlay.close(); } });

Page 30: Building Universal Applications with Angular 2

tooltip.jsvar Tooltip = ng.Directive({ selector: '[tooltip]', inputs: ['tooltip'], host: { '(mouseenter)': 'onMouseEnter()', '(mouseleave)': 'onMouseLeave()' } }) .Class({ constructor: [ng.Inject(ng.ElementRef), ng.Inject(OverlayManager), function (tooltip, el, manager) { this.el = el; this.overlay = manager.get(tooltip); }], onMouseEnter() { this.overlay.open(this.el, this.tooltip); }, onMouseLeave() { this.overlay.close(); } });

Page 31: Building Universal Applications with Angular 2

Components

Page 32: Building Universal Applications with Angular 2

Directives with views

Page 33: Building Universal Applications with Angular 2

hello-world.ts

@Component({ selector: 'hello-world' }) @View({ template: '<h1>Hello, {{this.target}}!</h1>' }) class HelloWorld { target:string; constructor() { this.target = 'world'; } }

Page 34: Building Universal Applications with Angular 2

hello-world.ts

@Component({ selector: 'hello-world' }) @View({ template: '<h1>Hello, {{this.target}}!</h1>' }) class HelloWorld { target:string; constructor() { this.target = 'world'; } }

Page 35: Building Universal Applications with Angular 2

hello-world.ts

@Component({ selector: 'hello-world' }) @View({ template: '<h1>Hello, {{this.target}}!</h1>' }) class HelloWorld { target:string; constructor() { this.target = 'world'; } }

Page 36: Building Universal Applications with Angular 2

Pipes

Page 37: Building Universal Applications with Angular 2

Encapsulate the

data transformation logic

Page 38: Building Universal Applications with Angular 2

lowercase-pipe.ts

@Pipe({ name: 'lowercase' }) class LowerCasePipe implements PipeTransform { transform(value: string): string { if (!value) return value; if (typeof value !== 'string') { throw new Error('Invalid pipe value', value); } return value.toLowerCase(); } }

Page 39: Building Universal Applications with Angular 2

Services

Page 40: Building Universal Applications with Angular 2

Simply, ES2015 classes which can

be wired together with…

Page 41: Building Universal Applications with Angular 2

Dependency Injection

Page 42: Building Universal Applications with Angular 2

di.ts

import { provide, Injector, Injectable } from 'angular2/angular2';

@Injectable() class DataMapper { constructor(private http: Http) {} }

class Http {}

let injector = Injector.resolveAndCreate([ provide(Http).toValue(new Http()), DataMapper ]);

injector.get(DataMapper);

Page 43: Building Universal Applications with Angular 2

di.ts

import { provide, Injector, Injectable } from 'angular2/angular2';

@Injectable() class DataMapper { constructor(private http: Http) {} }

class Http {}

let injector = Injector.resolveAndCreate([ provide(Http).toValue(new Http()), DataMapper ]);

injector.get(DataMapper);

Page 44: Building Universal Applications with Angular 2

di.ts

import { provide, Injector, Injectable } from 'angular2/angular2';

@Injectable() class DataMapper { constructor(private http: Http) {} }

class Http {}

let injector = Injector.resolveAndCreate([ provide(Http).toValue(new Http()), DataMapper ]);

injector.get(DataMapper);

Page 45: Building Universal Applications with Angular 2

di.ts

import { provide, Injector, Injectable } from 'angular2/angular2';

@Injectable() class DataMapper { constructor(private http: Http) {} }

class Http {}

let injector = Injector.resolveAndCreate([ provide(Http).toValue(new Http()), DataMapper ]);

injector.get(DataMapper);

Page 46: Building Universal Applications with Angular 2
Page 47: Building Universal Applications with Angular 2
Page 48: Building Universal Applications with Angular 2
Page 49: Building Universal Applications with Angular 2
Page 50: Building Universal Applications with Angular 2

Now you know the basics!

Page 51: Building Universal Applications with Angular 2

Lets take a step back…

Page 52: Building Universal Applications with Angular 2
Page 53: Building Universal Applications with Angular 2
Page 54: Building Universal Applications with Angular 2

Angular 2 is platform agnostic

Page 55: Building Universal Applications with Angular 2

Not coupled with DOM, even HTML

Page 56: Building Universal Applications with Angular 2
Page 57: Building Universal Applications with Angular 2

…and even more…

Page 58: Building Universal Applications with Angular 2

Client Server

Page 59: Building Universal Applications with Angular 2

Client Server

Page 60: Building Universal Applications with Angular 2

Client Server

GET /

GET *loop

Page 61: Building Universal Applications with Angular 2

Client Server

GET /

GET *loop

Running JavaScript

Page 62: Building Universal Applications with Angular 2

Client Server

GET /

GET *loop

GET *loop

Page 63: Building Universal Applications with Angular 2

Client Server

GET /

GET *loop

GET *loop

Page 64: Building Universal Applications with Angular 2

server-side rendering

Page 65: Building Universal Applications with Angular 2

Client Server

Page 66: Building Universal Applications with Angular 2

Client Server

Page 67: Building Universal Applications with Angular 2

Client Server

GET /

Page 68: Building Universal Applications with Angular 2

Client Server

GET /Running JavaScript

Page 69: Building Universal Applications with Angular 2

Client Server

GET /

GET *loop

Page 70: Building Universal Applications with Angular 2

Client Server

GET /

GET *loop

Running JavaScript

Page 71: Building Universal Applications with Angular 2

Client Server

GET /

GET *loop

Page 72: Building Universal Applications with Angular 2
Page 73: Building Universal Applications with Angular 2

Change detection can be

run into separate process

Page 74: Building Universal Applications with Angular 2
Page 75: Building Universal Applications with Angular 2

so…what’s wrong with

Angular 2?

Page 76: Building Universal Applications with Angular 2
Page 77: Building Universal Applications with Angular 2
Page 78: Building Universal Applications with Angular 2
Page 79: Building Universal Applications with Angular 2
Page 80: Building Universal Applications with Angular 2

Google

Page 81: Building Universal Applications with Angular 2

Google

Angular 1

Page 82: Building Universal Applications with Angular 2

Angular 2

Google

Angular 1

Page 83: Building Universal Applications with Angular 2
Page 84: Building Universal Applications with Angular 2
Page 85: Building Universal Applications with Angular 2

Angular 2 is…

Page 86: Building Universal Applications with Angular 2

rewritten from scratch

Page 87: Building Universal Applications with Angular 2

…developed in a

different language

Page 88: Building Universal Applications with Angular 2

…completely

incompatible API

Page 89: Building Universal Applications with Angular 2

…brand

new building blocks

Page 90: Building Universal Applications with Angular 2

Why?

Page 91: Building Universal Applications with Angular 2

Web have moved forward

Page 92: Building Universal Applications with Angular 2
Page 93: Building Universal Applications with Angular 2

WebWorkers

Page 94: Building Universal Applications with Angular 2
Page 95: Building Universal Applications with Angular 2
Page 96: Building Universal Applications with Angular 2
Page 97: Building Universal Applications with Angular 2

Learnt lessons

Page 98: Building Universal Applications with Angular 2

Mutable state

Page 99: Building Universal Applications with Angular 2

Tangled data-flow

Page 100: Building Universal Applications with Angular 2
Page 101: Building Universal Applications with Angular 2

…we will make the transition process boring…

Page 102: Building Universal Applications with Angular 2
Page 103: Building Universal Applications with Angular 2

ngUpgrade

Page 104: Building Universal Applications with Angular 2

How to migrate to Angular 2? (2 easy steps)

Page 105: Building Universal Applications with Angular 2

Step 1

Page 106: Building Universal Applications with Angular 2
Page 107: Building Universal Applications with Angular 2
Page 108: Building Universal Applications with Angular 2
Page 109: Building Universal Applications with Angular 2

A

B C

D E F

Page 110: Building Universal Applications with Angular 2
Page 111: Building Universal Applications with Angular 2

Step 2

Page 112: Building Universal Applications with Angular 2
Page 113: Building Universal Applications with Angular 2
Page 114: Building Universal Applications with Angular 2
Page 115: Building Universal Applications with Angular 2
Page 116: Building Universal Applications with Angular 2
Page 117: Building Universal Applications with Angular 2
Page 118: Building Universal Applications with Angular 2
Page 119: Building Universal Applications with Angular 2

Thank you!github.com/mgechev twitter.com/mgechev blog.mgechev.com