Angular 2 observables

44
Angular 2 Observables, Change Detection, AsyncPipe, Forms, Rx.js / Geoff Filippi @geofffilippi

Transcript of Angular 2 observables

Page 1: Angular 2 observables

Angular 2Observables, Change Detection, AsyncPipe,

Forms, Rx.js / Geoff Filippi @geofffilippi

Page 2: Angular 2 observables

Geoff FilippiApplication Architect

Page 3: Angular 2 observables

OildexA cloud service company for oil and gas

1 year

Page 4: Angular 2 observables

Formerly:

Time Warner Cable12 years

Page 5: Angular 2 observables

Experience

Worked on streaming media (Voice over IP), 6 years5 million phone customers

Page 6: Angular 2 observables

Experience

Worked on video and streaming video, 4 years

Page 7: Angular 2 observables

Projectstwctv.com

Video streaming websitebackbone.js

Video streaming Set-Top Box (STB) web application

Page 8: Angular 2 observables

Oildex ProjectsRewrite 10+-year-old appsAngular 1.4

New routerES5

No Angular 2, yetNo ES6 or Typescript, yet

Page 9: Angular 2 observables

We will coverFundamentalsRelated conceptsAngular 2

Page 10: Angular 2 observables

FundamentalsA brief overview of reactive fundamentals

Reactive programmingFunctional Reactive Programming (FRP)Observer design pattern

Page 11: Angular 2 observables

Related conceptsObject.observePromises

Other Async conceptsRxJS

Page 12: Angular 2 observables

Observables in Angular 2FormsHttpAsyncPipe

Page 13: Angular 2 observables

Fundamentals

Page 14: Angular 2 observables

Overview of Reactive ProgrammingData flowsPropagation of change

Page 15: Angular 2 observables

Reactive ManifestoResponsiveResilientElasticMessage Driven

Page 16: Angular 2 observables

(FRP) Functional ReactiveProgramming

Reactive Programming

and

Functional Programming

Page 17: Angular 2 observables

Related Concepts

Page 18: Angular 2 observables

Observer Design PatternSubject tracks observersSubject notifies observers of state changes

Page 19: Angular 2 observables

TerminologySubject, Observable, ProducerObserver, Consumer

Page 20: Angular 2 observables

Object.observeNot the same as Observables

Formerly a Stage 2 ProposalProxy

Proposal withdrawn

Page 21: Angular 2 observables

Criticisms of Object.observeBig changes to Object internalsBad performanceNot well-supported or adopted

But really,

Ecosystem moved in different direction

Page 23: Angular 2 observables

Differences between Observablesand Object.observe

Page 24: Angular 2 observables

Creating an ObservableThe hard way

let myObservable = new Observable(observer => { const token = doAsyncAction((err, value) => { if (err) } observer.error(err); } else { observer.next(value); observer.complete(); } });

return () => { cancelAsyncAction(token); }; {);

Page 25: Angular 2 observables

CompareObservablesPromisesEventscallbacks

Page 26: Angular 2 observables

Promises vs. ObservablesPromise is like a async variableObservable is like a async array

Page 27: Angular 2 observables

Promises vs. ObservablesPromises

Single valueCannot be cancelledNot lazyGood for some AJAX calls

Unless you want to cancel themCatch, Finally

Page 28: Angular 2 observables

Promises vs. ObservablesObservables

StreamsCan be unsubscribedLazy, until you call .subscribe()Better for events, WebSockets

Animations, AJAX you want to cancelCan by retriedCatch, Finally

Page 29: Angular 2 observables

Bridging ObservablesEasy way to get an observable

You can turn other async concepts into an observable usinga helper

Promises.from()

Generator.from()

Callbacks.fromCallback()

Page 30: Angular 2 observables

Bridging ObservablesEasy way to get an observable

Events.fromEvent()

DOMAJAXWebSockets .fromWebSocket()

Other observable implementationsbacon.jskefir.js

Page 31: Angular 2 observables

Bridging ObservablesYou can even turn non-async concepts into an observable

using a helper

Arrays.of()

Page 32: Angular 2 observables

Working with Promises vs.Observables

.then() becomes .subscribe()

Page 33: Angular 2 observables

Working with Promises vs.Observables

Observables do not need to complete, but...

If you need to do something when an observable completes,pass an optional complete handler

Page 34: Angular 2 observables

RxJSv5.0.0-beta.1ObservableSubjectImplementation used in Angular 2

Page 35: Angular 2 observables

Angular 2

Page 36: Angular 2 observables

Angular 2FormsHttpAsyncPipeChange detection

Page 37: Angular 2 observables

FormsForms are observable

this.myForm = fb.group({ 'sku': ['', Validators.required] });

this.sku = this.myForm.controls['sku'];

this.sku.valueChanges.subscribe( (value: string) => { console.log('sku changed to: ', value); } );

this.myForm.valueChanges.subscribe( (value: string) => { console.log('form changed to: ', value); } );

Page 38: Angular 2 observables

HttpCancel requestsStream results

"type ahead"Returns observable

Page 39: Angular 2 observables

HttpgetRandomQuote() { this.http.get('http://localhost:3001/api/random-quote') .retry(3) .map(res => res.text()) .subscribe( data => this.randomQuote = data, err => this.logError(err), () => console.log('Random Quote Complete') ); }

Page 40: Angular 2 observables

PipesLike Angular 1 filter

Page 41: Angular 2 observables

AsyncPipeCan subscribe to observables

timerAsync = Observable.interval(1000).startWith(0);

<h2>Current Total (Async Pipe): {{timerAsync | async}}</h2>

Page 42: Angular 2 observables

Change DetectionNew in Angular 2:

Apps are reactiveChange detection is directionalYou can skip walking parts of the tree

Immutable objectsObservables

Page 43: Angular 2 observables

ngrxReactive Extensions for Angular 2

ngrx/store

Can be used to implement elm/redux-style applications inAngular 2

Page 44: Angular 2 observables

Questions?