Slide 1

Slide 1 text

GETTING STARTED WITH ANGULAR 2 FluentConf March 7, 2016 Jeremy Wilken @gnomeontherun

Slide 2

Slide 2 text

HI, I’M JEREMY Experience Engineer at Teradata Lives in Austin, TX Author of Ionic in Action, Angular 2 in Action Certified Beer Judge and Homebrewer

Slide 3

Slide 3 text

INTRODUCE YOURSELF TO AT LEAST 2 PEOPLE NEAR TO YOU We’ve got 3 hours together, let’s make it more fun.

Slide 4

Slide 4 text

AGENDA • Web applications with Angular 2 • Setup the app • Add a service • Create a component • Break (30 mins) • Add more components • Routing • Testing • Review/Questions

Slide 5

Slide 5 text

FOLLOWING ALONG • Code along with me as much you like • Checkout the git tags as we go • Use Vagrant, NVM, or Plunkr if needed

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

WEB APPLICATIONS WITH ANGULAR 2

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

ES6 IN A NUTSHELL • New features: classes, modules, promises, arrows, generators, and more. • Additive only, doesn’t remove existing features. • Most features can be transpiled to current ES5. • Will continue to add features.

Slide 11

Slide 11 text

TYPESCRIPT IN A NUTSHELL • Transpiler to compile down to ES6/5/3. • Adds strict typings to variables. • “Typed Superset” that only extends JavaScript syntax.

Slide 12

Slide 12 text

JAVASCRIPT TYPE LIMITATIONS var bill = 20; var tip = document.getElementById(‘tip').value; // 5 var total = bill + tip; // 25? Are you sure? What is the value of total?

Slide 13

Slide 13 text

JAVASCRIPT TYPE LIMITATIONS var bill:number = 20; var tip:number = (document.getElementById(‘tip’)).value ; var total:number = bill + tip; // 25!? TypeScript can enforce the right type is assigned, here tip is invalid

Slide 14

Slide 14 text

JAVASCRIPT TYPE LIMITATIONS var bill:number = 20; var tip:number = parseFloat( (document.getElementById(‘tip’)).value ); var total:number = bill + tip; // 25! TypeScript does not convert values, you must

Slide 15

Slide 15 text

JAVASCRIPT IS NOW A COMPILED LANGUAGE

Slide 16

Slide 16 text

JAVASCRIPT IS NOW A COMPILE-TO LANGUAGE

Slide 17

Slide 17 text

ES6/TYPESCRIPT PRIMER const stocks = ['AAPL', 'GOOG', 'FB', ‘AMZN']; let service = 'https://angular2-in-action- api.herokuapp.com'; ES6 const & let keyword

Slide 18

Slide 18 text

ES6/TYPESCRIPT PRIMER let name = 'Jeremy'; let template = `

Template by ${name}

I can write markup without escaping and write on multiple lines!

`; ES6 inline multiline template strings

Slide 19

Slide 19 text

ES6/TYPESCRIPT PRIMER let stocks = ['aapl', 'goog', 'fb', 'amzn']; class Dashboard { constructor() { stocks.forEach(stock => { this.add(stock.toUpperCase()); }); } add(stock) { this.stocks.push(stock); } } ES6 arrow functions

Slide 20

Slide 20 text

ES6/TYPESCRIPT PRIMER class Dashboard { constructor(service) { this.symbols = service.get(); } reset() { this.symbols = []; } } ES6 classes

Slide 21

Slide 21 text

ES6/TYPESCRIPT PRIMER import {service} from './service'; export class Dashboard { constructor() { this.symbols = service.get(); } } ES6 modules

Slide 22

Slide 22 text

ES6/TYPESCRIPT PRIMER @Component({ selector: 'app' }) export class App { } ES7 decorators

Slide 23

Slide 23 text

ES6/TYPESCRIPT PRIMER interface StockInterface { symbol: string, lastTradePriceOnly: number, change: number, changeInPercent: number } let stocks: Array = []; Typescript interfaces and type declarations

Slide 24

Slide 24 text

ANGULAR2 APP ARCHITECTURE • Component based (tree of components) • Modularity (ES6 modules) • Dependency injection • Services • Component based routing

Slide 25

Slide 25 text

APP ARCHITECTURE

Slide 26

Slide 26 text

THE BASE Uses the Angular CLI which has a local server. Files are transpiled with TypeScript.

Slide 27

Slide 27 text

Angular CLI

Slide 28

Slide 28 text

THE APP COMPONENT Creating the app component, and bootstrapping it

Slide 29

Slide 29 text

Angular CLI App Component index.html SystemJS Module Loader

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

THE STOCK SERVICE Creating a reusable service to manage stocks collection

Slide 32

Slide 32 text

Angular CLI App Component index.html Stock Service ES6 Module

Slide 33

Slide 33 text

REST API Service

Slide 34

Slide 34 text

THE SUMMARY COMPONENT Using directives, types, and bindings

Slide 35

Slide 35 text

Angular CLI App Component index.html Stock Service Summary Component ES6 Module, Class Decorator

Slide 36

Slide 36 text

5 Summary Components

Slide 37

Slide 37 text

THE DASHBOARD COMPONENT Loading data, using services, and importing components.

Slide 38

Slide 38 text

Angular CLI App Component index.html Stock Service Summary Component Dashboard Component Dependency Injection

Slide 39

Slide 39 text

Dashboard Component

Slide 40

Slide 40 text

THE MANAGE COMPONENT Use a form to manage the list of stocks.

Slide 41

Slide 41 text

Angular CLI App Component index.html Stock Service Summary Component Dashboard Component Manage Component Routing

Slide 42

Slide 42 text

Manage Component Routing Links

Slide 43

Slide 43 text

LET’S REVIEW • Angular CLI generates app files and tooling • App component is bootstraped to start rendering • Services are used to load and manage data • It is best to nest simple components • Pipes and directives manipulate rendered data • Routing determines which component to display

Slide 44

Slide 44 text

WHERE DO YOU LIVE, AND WHERE WOULD YOU RATHER LIVE? Talk to Your Neighbor Short Break

Slide 45

Slide 45 text

LET’S BUILD AN ANGULAR 2 APP

Slide 46

Slide 46 text

https://github.com/gnomeontherun/ angular2-fluent-conf Follow README instructions

Slide 47

Slide 47 text

START THE APP $ ng init -n tracker

Slide 48

Slide 48 text

CHECKOUT STEP 1 $ git checkout -f step1

Slide 49

Slide 49 text

REVIEW START THE APP • Angular CLI generates project files • Default files needs some styling and structure • Angular CLI runs local server • Angular CLI runs testing suite

Slide 50

Slide 50 text

No content

Slide 51

Slide 51 text

WHAT IS YOUR FAVORITE SONG, AND WHAT DOES IT MEAN TO YOU? Talk to Your Neighbor Short Break

Slide 52

Slide 52 text

STOCKS SERVICE $ ng generate service stocks

Slide 53

Slide 53 text

CHECKOUT STEP 2 $ git checkout -f step2

Slide 54

Slide 54 text

REVIEW STOCKS SERVICE • Class manages list of stocks • Http service helps makes REST calls • Interfaces enforce typings • Annotate class to make it injectable

Slide 55

Slide 55 text

REST API Service

Slide 56

Slide 56 text

IF YOU WROTE A BOOK FOR O’REILLY, WHAT WOULD YOUR COVER ANIMAL BE? Talk to Your Neighbor Short Break

Slide 57

Slide 57 text

SUMMARY COMPONENT $ ng generate component summary

Slide 58

Slide 58 text

CHECKOUT STEP 3 $ git checkout -f step3

Slide 59

Slide 59 text

REVIEW SUMMARY COMPONENT • Controller accepts an input value • Controller has methods for template • Pipes format data for display • NgIf conditionally includes an element • Use NgClass to apply colors to cards

Slide 60

Slide 60 text

5 Summary Components

Slide 61

Slide 61 text

BREAK TIME

Slide 62

Slide 62 text

IF YOU COULD HAVE ANY CAR, WHAT WOULD IT BE AND WHY? Talk to Your Neighbor Short Break

Slide 63

Slide 63 text

DASHBOARD COMPONENT $ ng generate component dashboard

Slide 64

Slide 64 text

CHECKOUT STEP 4 $ git checkout -f step4

Slide 65

Slide 65 text

REVIEW DASHBOARD COMPONENT • Controller loads the stock data • Stocks service handles the actual http requests • Services and directives must be injected • ngFor loops over stocks and displays a card

Slide 66

Slide 66 text

Dashboard Component

Slide 67

Slide 67 text

IF YOU COULD TRAVEL SOMEWHERE IN TIME, WHERE AND WHEN WOULD YOU GO? Talk to Your Neighbor Short Break

Slide 68

Slide 68 text

MANAGE COMPONENT $ ng generate component manage

Slide 69

Slide 69 text

CHECKOUT STEP 5 $ git checkout -f step5

Slide 70

Slide 70 text

REVIEW MANAGE COMPONENT • Controller manages the list of stocks • Form builder describes a form • ngFormModel is used with form inputs • Event bindings send data to controller

Slide 71

Slide 71 text

Manage Component

Slide 72

Slide 72 text

WHAT IS YOUR BIGGEST PET PEEVE, AND WHEN WAS THE LAST TIME SOMEONE DID IT? Talk to Your Neighbor Short Break

Slide 73

Slide 73 text

ROUTING

Slide 74

Slide 74 text

CHECKOUT STEP 6 $ git checkout -f step6

Slide 75

Slide 75 text

REVIEW ROUTING • Configure routes to define links • Components must be directly referenced in config • Router link directive links to components • Router outlet is where content is rendered

Slide 76

Slide 76 text

Routing Links Router Outlet

Slide 77

Slide 77 text

WHAT IS THE WEIRDEST HABIT YOU HAVE? (WE ALL HAVE ONE) Talk to Your Neighbor Short Break

Slide 78

Slide 78 text

UNIT TESTING

Slide 79

Slide 79 text

CHECKOUT STEP 7 $ git checkout -f step7

Slide 80

Slide 80 text

REVIEW UNIT TESTING • Angular CLI generates test files • Test the controller and service methods • Use Angular’s testing services • Testing is expected to become easier

Slide 81

Slide 81 text

QUESTIONS use #topics-angular slack channel if you have other questions later

Slide 82

Slide 82 text

THANK YOU! Jeremy Wilken @gnomeontherun http://manning.com/books/angular-2-in-action https://speakerdeck.com/gnomeontherun