SlideShare a Scribd company logo
http://digitaldrummerj.me
Justin James
Web Developer and Professional Speaker
http://digitaldrummerj.me/
@digitaldrummerj
http://digitaldrummerj.me 2
Welcome!
Some "rules"
Every question is important
Help each other
Have fun
http://digitaldrummerj.me 3
Agenda
Brief Intro to TypeScript
Angular Overview
Angular Forms Overview
Hands On Labs
http://digitaldrummerj.me 4
Your Experience?
HTML, CSS, JavaScript
TypeScript
Angular 1
Angular 2
http://digitaldrummerj.me
Framework for building client side applications using
HTML, CSS, and TypeScript
Angular
5
http://digitaldrummerj.me
Built In Backend IntegrationModular
Powerful Data BindingExpressive HTML
Why Angular
6
http://digitaldrummerj.me
Enhances ProductivitySimplified API
Built For SpeedModern
Why Angular 2?
7
http://digitaldrummerj.me 8
http://digitaldrummerj.me
Typed Superset of JavaScript
TypeScript
9
http://digitaldrummerj.me
Intellisense and
Syntax Checking
Lambda (=>)
Support
EncapsulationStatic typingSupports JavaScript
Features
10
http://digitaldrummerj.me
Most JavaScript is already valid TypeScript
some-javascript.jssome-javascript.js
some-typescript.ts
var items = getItems();
var goSportsTeam = true;
var super = 'mario';
11
http://digitaldrummerj.me
Dynamic
JavaScript, Python,
Ruby, PHP
var number = 5;
number = "Hello!";
// work great!
int number = 10;
number = "Hello!";
// Compiler Error
Static
C, C++, C#, Java, JADE,
Fortran, Haskell
Typing….
12
http://digitaldrummerj.me
JavaScript Typing Fun
function numberCruncher (numA, numB){
return numA + numB;
}
var result = numberCruncher(5, 5);
console.log(result);
>> 10
13
http://digitaldrummerj.me
JavaScript Typing Fun
function numberCruncher (numA, numB){
return numA + numB;
}
var result = numberCruncher(5, true);
console.log(result);
>> 6
14
http://digitaldrummerj.me
JavaScript Typing Fun
function numberCruncher (numA, numB){
return numA + numB;
}
var result = numberCruncher(5, 'js4lyfe');
console.log(result);
>> "5js4lyfe"
15
http://digitaldrummerj.me
JavaScript Typing Fun
function numberCruncher (numA, numB){
return numA + numB;
}
var result = numberCruncher(5, { param: true });
console.log(result);
>> "5[object Object]"
16
http://digitaldrummerj.me
Types
boolean, number, string
array, enum
any, void
status: string = 'TS Rocks!';
havingFun: boolean = true;
daysTillVacation: number = 60;
17
http://digitaldrummerj.me
Arrays
List of values
var myNumbers : number[] = [170, 2.6, 2245, 3032, 400];
// Or...
var myNumbers : Array<number> = [170, 2.6, 2245, 3032, 400];
18
http://digitaldrummerj.me
Arrays
Enforce types for array content
var myNumbers : number[] = [];
myNumbers.push('700');
Argument of type 'string' is not assignable to
parameter of type 'number'
19
http://digitaldrummerj.me
Functions
Input Parameter and Return Types
function myTypedFunction(paramName : dataType) : returnType {
// Regular junk here
}
20
http://digitaldrummerj.me
Functions
Input Parameter and Return Types
function trimLength(inputVal : string) : number {
return inputVal.trim().length;
}
21
http://digitaldrummerj.me
Void
A function that returns nothing
function initSomething() : void {
// do something
}
var pointless = initSomething(); // Compiler Error!
22
http://digitaldrummerj.me
Any
Restores basic JavaScript dynamic typing behavior
var foo: any;
23
http://digitaldrummerj.me
Any
Restores basic JavaScript dynamic typing behavior
var foo: any;
foo = 'Hello';
foo = true;
foo = 42;
THINK TWICE BEFORE USING!
24
http://digitaldrummerj.me
Classes
Encapsulate functionality and data for an object
Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
let greeter = new Greeter("world").greet();
25
http://digitaldrummerj.me
Interfaces
Powerful way of defining contracts
interface Label {
value: string;
}
class label implements Label {
value: string = 'label value';
}
26
http://digitaldrummerj.me
Modules
Encapsulates variables, functions, classes, etc
export interface StringValidator {
isAcceptable(s: string): boolean;
}
export const numberRegexp = /^[0-9]+$/;
export class ZipCodeValidator implements StringValidator {
isAcceptable(s: string) {
return s.length === 5 && numberRegexp.test(s);
}
}
27
http://digitaldrummerj.me
Official Website
www.typescriptlang.org
28
http://digitaldrummerj.me 29
http://digitaldrummerj.me 30
http://digitaldrummerj.me
ServicesRouting
ComponentsModules
Main Building Blocks
31
http://digitaldrummerj.me
Organize application into blocks of functionality.
Contain routes, components, services, and more.
Every app has one module minimum, the root
module.
Modules
32
< >
http://digitaldrummerj.me 33
Module Code – app.module.ts< >
http://digitaldrummerj.me 34
Module Code – app.module.ts< >
http://digitaldrummerj.me 35
Module Code – app.module.ts< >
http://digitaldrummerj.me 36
Module Code – app.module.ts< >
http://digitaldrummerj.me
Most basic building block of the UI
Contains a template, stylesheet, and data logic
Can include other components
Provides CSS Isolation
Component
37
< >
http://digitaldrummerj.me 38
Component – app.component.ts< >
http://digitaldrummerj.me 39
Component – app.component.ts< >
http://digitaldrummerj.me 40
Component – app.component.ts< >
http://digitaldrummerj.me
HTML to tell Angular how to render a component
Include data binding as well as other components
and directives
Leverages native DOM events and properties
Template
41
< >
http://digitaldrummerj.me
Template – app.component.html
42
< >
http://digitaldrummerj.me
Data Binding
43
< >
http://digitaldrummerj.me
Data Binding
44
< >
http://digitaldrummerj.me
Data Binding
45
< >
http://digitaldrummerj.me
Data Binding
46
< >
http://digitaldrummerj.me 47
Template – more complex example< >
http://digitaldrummerj.me 48
Template – more complex example< >
http://digitaldrummerj.me 49
Template – more complex example< >
http://digitaldrummerj.me 50
Template – more complex example< >
http://digitaldrummerj.me
Renders component based on the URL state
Drives navigation
Lazy Loading
Parent/Child Routes
Restricted Routes
Routing
51
< >
http://digitaldrummerj.me 52
Routing Code< >
http://digitaldrummerj.me 53
Routing Code< >
http://digitaldrummerj.me
Data layer
Logic is not component related
Invariably asynchronous
Services
54
< >
http://digitaldrummerj.me 55
Service Code< >
http://digitaldrummerj.me 56
Service Code< >
http://digitaldrummerj.me 57
Service Code< >
http://digitaldrummerj.me 58
Service – Getting Data< >
http://digitaldrummerj.me 59
Service – Getting Data< >
http://digitaldrummerj.me 60
Service – Getting Data< >
http://digitaldrummerj.me 61
Component – Receiving Data< >
http://digitaldrummerj.me 62
Component – Receiving Data< >
http://digitaldrummerj.me 63
Component – Receiving Data< >
http://digitaldrummerj.me
Use Environment Files
Can generate build with different environments
Application
Settings
64
http://digitaldrummerj.me
export const environment ={
production: false,
environmentName: 'Local',
apiBaseUrl: 'http://localhost:3000'
};
Environment File – environment.ts
65
http://digitaldrummerj.me 66
Angular Lifecycle
Create Render
Create
&
Render
Children
Process
Change
Destroy
http://digitaldrummerj.me
OnDestroyOnChangesOnInit
Lifecycle Events
67
http://digitaldrummerj.me
• http://nodejs.org
Node JS (suggest 6.9+ LTS)
• npm install -g @angular/cli
NPM Global Packages
Global
Setup
68
http://digitaldrummerj.me
• ng new AppName --style scss –routing
Create New Project
• ng generate [TYPE] [NAME]
Generate
• ng serve -e=ENV_NAME
Start Application
• ng test
Unit Test
• ng lint
Linting
Creating
Applications
69
http://digitaldrummerj.me
ng build --target=development --environment=dev
Example:
ng build --dev--environment=dev
ng build --prod --environment=prod
Angular Deploy
70
http://digitaldrummerj.me 71
Angular Release Plan
Weekly - Patches
Monthly – Minor Versions
Every 6 Months – Major Versions
Major Version Release Timeframe
Angular 4 March 2017
Angular 5 Sept/Oct 2017
Angular 6 March 2018
Angular 7 Sept/Oct 2018
http://digitaldrummerj.me
Semantic Versioning (SEMVER)
72
http://digitaldrummerj.me 73
Migrating from Angular 1
Google has no plans to update Angular 1 to match Angular 2
Suggestion:
• Leave existing applications in Angular 1
• Use Angular 2 for new applications
http://digitaldrummerj.me 74
http://digitaldrummerj.me 75
http://digitaldrummerj.me
FormArrayFormGroupFormControl
Building Blocks of Forms
76
http://digitaldrummerj.me
First Name required
Justin
Name
firstName
Value
Justin
Validator
required
Valid
true
FormControl
77
http://digitaldrummerj.me
FormControl
name: street
FormControl
name: city
FormControl
name: state
FormControl
name: zip
FormGroup
78
Street ___________________________________________________
City __________________ State ____________ Zip _____________
http://digitaldrummerj.me
FormControl 0
FormControl 1
FormControl 2
FormArray
79
Street _____________________________
City ________State ____ Zip __________
Street _____________________________
City ________State ____ Zip __________
Street _____________________________
City ________State ____ Zip __________
http://digitaldrummerj.me
Model Driven
(ReactiveFormsModule)
Template Driven
(FormsModule)
2 Types Of Forms
80
http://digitaldrummerj.me
All About
ngModel
Implicitly Applies
Directives to Form
Template Driven Approach
81
http://digitaldrummerj.me
Lightweight ComponentSimplicity
Benefits of Template Driven Approach
82
http://digitaldrummerj.me
Not
Testable
Template HTML
Hard to Read
Complexity Grows
Very Fast
Drawbacks of Template Driven Approach
83
http://digitaldrummerj.me
Enable Template Drive Approach
app.module.ts
84
http://digitaldrummerj.me
Template Driven Form - Template
85
http://digitaldrummerj.me
Template Driven Form Submit - Component
86
http://digitaldrummerj.me
Pattern
MaxLengthMax
NullEmailRequired
Built-in Validators
Min MinLength
https://angular.io/api/forms/Validators
87
http://digitaldrummerj.me
Pristine
Dirty
Valid
Invalid
Touched
Untouched
Form Control States
88
https://angular.io/guide/forms#track-control-state-and-validity-with-ngmodel
http://digitaldrummerj.me
Template Driven Form Validation - Template
89
http://digitaldrummerj.me
Data Binding
Implicitly Created
Validation Done
In Component
Form Setup
In Component
Model Driven Approach
90
http://digitaldrummerj.me
Can Monitor
Form Changes
Typings
Prevent Errors
More
Maintainable
Extendable
Validation Rules
Testable
Benefits of Model Driven Approach
91
http://digitaldrummerj.me
????
Only Makes Sense
If Logic Is Complex
Drawbacks of Model Driven Approach
92
http://digitaldrummerj.me
Enable Model Drive Approach
app.module.ts
93
http://digitaldrummerj.me
Model Driven Form - Template
94
http://digitaldrummerj.me
Model Driven Form - Component
95
http://digitaldrummerj.me
Model Driven Form Submit
96
http://digitaldrummerj.me
Model Driven Form Validation - Template
97
http://digitaldrummerj.me
Model Driven Form Validation - Component
98
http://digitaldrummerj.me
Model Driven Form Watch For Changes
99
http://digitaldrummerj.me
Model Driven Form Generic Validation
100
http://digitaldrummerj.me
Template Driven
(FormsModule)
Implicit creation of FormControl()
Source of truth: template
Async
No Unit Testing
Model Driven
(ReactiveFormsModule)
Explicit creation of FormControl()
Source of truth: component class
Sync
Unit Testable
101
http://digitaldrummerj.me
Labs
http://digitaldrummerj.me/angular-tutorial
Template and Reactive Forms
Services
Route Guards
Header/Footer
Environment Settings
102
http://digitaldrummerj.me
Angular Style Guide
Angular API Reference
Angular 1 to Angular Comparison
Architecture Overview
Angular CLI Docs
Additional
Resources
103
http://digitaldrummerj.me
please submit your evaluations
104
http://digitaldrummerj.me
Follow Me @digitaldrummerj
http://digitaldrummerj.me 106
Introductions
Tell us about yourself.
• Who are you?
• What do you hope to get out of the class?
• Which of your web projects are you most proud of?

More Related Content

What's hot

Micronaut Launchpad
Micronaut LaunchpadMicronaut Launchpad
Micronaut Launchpad
Zachary Klein
 
Micronaut: Changing the Micro Future
Micronaut: Changing the Micro FutureMicronaut: Changing the Micro Future
Micronaut: Changing the Micro Future
Zachary Klein
 
EWD 3 Training Course Part 20: The DocumentNode Object
EWD 3 Training Course Part 20: The DocumentNode ObjectEWD 3 Training Course Part 20: The DocumentNode Object
EWD 3 Training Course Part 20: The DocumentNode Object
Rob Tweed
 
AngularJS Project Setup step-by- step guide - RapidValue Solutions
AngularJS Project Setup step-by- step guide - RapidValue SolutionsAngularJS Project Setup step-by- step guide - RapidValue Solutions
AngularJS Project Setup step-by- step guide - RapidValue Solutions
RapidValue
 
A friend in need - A JS indeed
A friend in need - A JS indeedA friend in need - A JS indeed
A friend in need - A JS indeed
Yonatan Levin
 
A gently introduction to AngularJS
A gently introduction to AngularJSA gently introduction to AngularJS
A gently introduction to AngularJS
Gregor Woiwode
 
EWD.js: The Future Starts Here
EWD.js: The Future Starts HereEWD.js: The Future Starts Here
EWD.js: The Future Starts Here
Rob Tweed
 
Sharper Better Faster Dagger ‡ - Droidcon SF
Sharper Better Faster Dagger ‡ - Droidcon SFSharper Better Faster Dagger ‡ - Droidcon SF
Sharper Better Faster Dagger ‡ - Droidcon SF
Pierre-Yves Ricau
 
AngularJs
AngularJsAngularJs
AngularJs
syam kumar kk
 
The Past Year in Spring for Apache Geode
The Past Year in Spring for Apache GeodeThe Past Year in Spring for Apache Geode
The Past Year in Spring for Apache Geode
VMware Tanzu
 
Managing user's data with Spring Session
Managing user's data with Spring SessionManaging user's data with Spring Session
Managing user's data with Spring Session
David Gómez García
 
Spring Boot Revisited with KoFu and JaFu
Spring Boot Revisited with KoFu and JaFuSpring Boot Revisited with KoFu and JaFu
Spring Boot Revisited with KoFu and JaFu
VMware Tanzu
 
Angular server side rendering - Strategies & Technics
Angular server side rendering - Strategies & Technics Angular server side rendering - Strategies & Technics
Angular server side rendering - Strategies & Technics
Eliran Eliassy
 
Using React with Grails 3
Using React with Grails 3Using React with Grails 3
Using React with Grails 3Zachary Klein
 
Angular2 and TypeScript
Angular2 and TypeScriptAngular2 and TypeScript
Angular2 and TypeScript
David Giard
 
Burn your grass with react native
Burn your grass with react nativeBurn your grass with react native
Burn your grass with react native
Eugene Zharkov
 
Flutter hooks tutorial (part 1) flutter animation using hooks (use effect and...
Flutter hooks tutorial (part 1) flutter animation using hooks (use effect and...Flutter hooks tutorial (part 1) flutter animation using hooks (use effect and...
Flutter hooks tutorial (part 1) flutter animation using hooks (use effect and...
Katy Slemon
 
Angular2 for Beginners
Angular2 for BeginnersAngular2 for Beginners
Angular2 for Beginners
Oswald Campesato
 

What's hot (20)

Micronaut Launchpad
Micronaut LaunchpadMicronaut Launchpad
Micronaut Launchpad
 
Micronaut: Changing the Micro Future
Micronaut: Changing the Micro FutureMicronaut: Changing the Micro Future
Micronaut: Changing the Micro Future
 
EWD 3 Training Course Part 20: The DocumentNode Object
EWD 3 Training Course Part 20: The DocumentNode ObjectEWD 3 Training Course Part 20: The DocumentNode Object
EWD 3 Training Course Part 20: The DocumentNode Object
 
AngularJS Project Setup step-by- step guide - RapidValue Solutions
AngularJS Project Setup step-by- step guide - RapidValue SolutionsAngularJS Project Setup step-by- step guide - RapidValue Solutions
AngularJS Project Setup step-by- step guide - RapidValue Solutions
 
A friend in need - A JS indeed
A friend in need - A JS indeedA friend in need - A JS indeed
A friend in need - A JS indeed
 
A gently introduction to AngularJS
A gently introduction to AngularJSA gently introduction to AngularJS
A gently introduction to AngularJS
 
EWD.js: The Future Starts Here
EWD.js: The Future Starts HereEWD.js: The Future Starts Here
EWD.js: The Future Starts Here
 
Sharper Better Faster Dagger ‡ - Droidcon SF
Sharper Better Faster Dagger ‡ - Droidcon SFSharper Better Faster Dagger ‡ - Droidcon SF
Sharper Better Faster Dagger ‡ - Droidcon SF
 
AngularJs
AngularJsAngularJs
AngularJs
 
The Past Year in Spring for Apache Geode
The Past Year in Spring for Apache GeodeThe Past Year in Spring for Apache Geode
The Past Year in Spring for Apache Geode
 
Managing user's data with Spring Session
Managing user's data with Spring SessionManaging user's data with Spring Session
Managing user's data with Spring Session
 
Spring Boot Revisited with KoFu and JaFu
Spring Boot Revisited with KoFu and JaFuSpring Boot Revisited with KoFu and JaFu
Spring Boot Revisited with KoFu and JaFu
 
Angular server side rendering - Strategies & Technics
Angular server side rendering - Strategies & Technics Angular server side rendering - Strategies & Technics
Angular server side rendering - Strategies & Technics
 
AngularJS - TechTalk 3/2/2014
AngularJS - TechTalk 3/2/2014AngularJS - TechTalk 3/2/2014
AngularJS - TechTalk 3/2/2014
 
Angular js
Angular jsAngular js
Angular js
 
Using React with Grails 3
Using React with Grails 3Using React with Grails 3
Using React with Grails 3
 
Angular2 and TypeScript
Angular2 and TypeScriptAngular2 and TypeScript
Angular2 and TypeScript
 
Burn your grass with react native
Burn your grass with react nativeBurn your grass with react native
Burn your grass with react native
 
Flutter hooks tutorial (part 1) flutter animation using hooks (use effect and...
Flutter hooks tutorial (part 1) flutter animation using hooks (use effect and...Flutter hooks tutorial (part 1) flutter animation using hooks (use effect and...
Flutter hooks tutorial (part 1) flutter animation using hooks (use effect and...
 
Angular2 for Beginners
Angular2 for BeginnersAngular2 for Beginners
Angular2 for Beginners
 

Similar to Up and Running with Angular

Getting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with ThymeleafGetting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with Thymeleaf
Masatoshi Tada
 
using Mithril.js + postgREST to build and consume API's
using Mithril.js + postgREST to build and consume API'susing Mithril.js + postgREST to build and consume API's
using Mithril.js + postgREST to build and consume API's
Antônio Roberto Silva
 
GraphQL @ Wix
GraphQL @ WixGraphQL @ Wix
GraphQL @ Wix
Adir Amsalem
 
Building Web Apps Sanely - EclipseCon 2010
Building Web Apps Sanely - EclipseCon 2010Building Web Apps Sanely - EclipseCon 2010
Building Web Apps Sanely - EclipseCon 2010
Chris Ramsdale
 
Front End Development for Back End Developers - UberConf 2017
Front End Development for Back End Developers - UberConf 2017Front End Development for Back End Developers - UberConf 2017
Front End Development for Back End Developers - UberConf 2017
Matt Raible
 
Java springboot microservice - Accenture Technology Meetup
Java springboot microservice - Accenture Technology MeetupJava springboot microservice - Accenture Technology Meetup
Java springboot microservice - Accenture Technology Meetup
Accenture Hungary
 
MongoDB.local Atlanta: Introduction to Serverless MongoDB
MongoDB.local Atlanta: Introduction to Serverless MongoDBMongoDB.local Atlanta: Introduction to Serverless MongoDB
MongoDB.local Atlanta: Introduction to Serverless MongoDB
MongoDB
 
Hexagonal architecture
Hexagonal architectureHexagonal architecture
Hexagonal architecture
Alessandro Minoccheri
 
Jiayi Hu - Get hyper-excited for web standards - Codemotion Rome 2019
Jiayi Hu - Get hyper-excited for web standards - Codemotion Rome 2019Jiayi Hu - Get hyper-excited for web standards - Codemotion Rome 2019
Jiayi Hu - Get hyper-excited for web standards - Codemotion Rome 2019
Codemotion
 
the grinder testing certification
the grinder testing certificationthe grinder testing certification
the grinder testing certification
Vskills
 
JavaScript Modules Past, Present and Future
JavaScript Modules Past, Present and FutureJavaScript Modules Past, Present and Future
JavaScript Modules Past, Present and Future
Igalia
 
Solving anything in VCL
Solving anything in VCLSolving anything in VCL
Solving anything in VCL
Fastly
 
Panmind at Ruby Social Club Milano
Panmind at Ruby Social Club MilanoPanmind at Ruby Social Club Milano
Panmind at Ruby Social Club Milano
Panmind
 
Choose Your Own Adventure with JHipster & Kubernetes - Utah JUG 2020
Choose Your Own Adventure with JHipster & Kubernetes - Utah JUG 2020Choose Your Own Adventure with JHipster & Kubernetes - Utah JUG 2020
Choose Your Own Adventure with JHipster & Kubernetes - Utah JUG 2020
Matt Raible
 
MCE^3 - Kyle Fuller - End-to-end Building Web Services in-swift-mce-2016
MCE^3 - Kyle Fuller - End-to-end Building Web Services in-swift-mce-2016MCE^3 - Kyle Fuller - End-to-end Building Web Services in-swift-mce-2016
MCE^3 - Kyle Fuller - End-to-end Building Web Services in-swift-mce-2016
PROIDEA
 
手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務
Mu Chun Wang
 
Angular JS deep dive
Angular JS deep diveAngular JS deep dive
Angular JS deep dive
Axilis
 

Similar to Up and Running with Angular (20)

ql.io at NodePDX
ql.io at NodePDXql.io at NodePDX
ql.io at NodePDX
 
Getting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with ThymeleafGetting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with Thymeleaf
 
using Mithril.js + postgREST to build and consume API's
using Mithril.js + postgREST to build and consume API'susing Mithril.js + postgREST to build and consume API's
using Mithril.js + postgREST to build and consume API's
 
GraphQL @ Wix
GraphQL @ WixGraphQL @ Wix
GraphQL @ Wix
 
Building Web Apps Sanely - EclipseCon 2010
Building Web Apps Sanely - EclipseCon 2010Building Web Apps Sanely - EclipseCon 2010
Building Web Apps Sanely - EclipseCon 2010
 
Front End Development for Back End Developers - UberConf 2017
Front End Development for Back End Developers - UberConf 2017Front End Development for Back End Developers - UberConf 2017
Front End Development for Back End Developers - UberConf 2017
 
Java springboot microservice - Accenture Technology Meetup
Java springboot microservice - Accenture Technology MeetupJava springboot microservice - Accenture Technology Meetup
Java springboot microservice - Accenture Technology Meetup
 
MongoDB.local Atlanta: Introduction to Serverless MongoDB
MongoDB.local Atlanta: Introduction to Serverless MongoDBMongoDB.local Atlanta: Introduction to Serverless MongoDB
MongoDB.local Atlanta: Introduction to Serverless MongoDB
 
JBoss World 2010
JBoss World 2010JBoss World 2010
JBoss World 2010
 
Hexagonal architecture
Hexagonal architectureHexagonal architecture
Hexagonal architecture
 
Jiayi Hu - Get hyper-excited for web standards - Codemotion Rome 2019
Jiayi Hu - Get hyper-excited for web standards - Codemotion Rome 2019Jiayi Hu - Get hyper-excited for web standards - Codemotion Rome 2019
Jiayi Hu - Get hyper-excited for web standards - Codemotion Rome 2019
 
the grinder testing certification
the grinder testing certificationthe grinder testing certification
the grinder testing certification
 
JavaScript Modules Past, Present and Future
JavaScript Modules Past, Present and FutureJavaScript Modules Past, Present and Future
JavaScript Modules Past, Present and Future
 
Solving anything in VCL
Solving anything in VCLSolving anything in VCL
Solving anything in VCL
 
Panmind at Ruby Social Club Milano
Panmind at Ruby Social Club MilanoPanmind at Ruby Social Club Milano
Panmind at Ruby Social Club Milano
 
Choose Your Own Adventure with JHipster & Kubernetes - Utah JUG 2020
Choose Your Own Adventure with JHipster & Kubernetes - Utah JUG 2020Choose Your Own Adventure with JHipster & Kubernetes - Utah JUG 2020
Choose Your Own Adventure with JHipster & Kubernetes - Utah JUG 2020
 
MCE^3 - Kyle Fuller - End-to-end Building Web Services in-swift-mce-2016
MCE^3 - Kyle Fuller - End-to-end Building Web Services in-swift-mce-2016MCE^3 - Kyle Fuller - End-to-end Building Web Services in-swift-mce-2016
MCE^3 - Kyle Fuller - End-to-end Building Web Services in-swift-mce-2016
 
手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務
 
Mvc - Titanium
Mvc - TitaniumMvc - Titanium
Mvc - Titanium
 
Angular JS deep dive
Angular JS deep diveAngular JS deep dive
Angular JS deep dive
 

More from Justin James

KCDC 2018 - Rapid API Development with Sails
KCDC 2018 - Rapid API Development with SailsKCDC 2018 - Rapid API Development with Sails
KCDC 2018 - Rapid API Development with Sails
Justin James
 
Angular Unit Testing NDC Minn 2018
Angular Unit Testing NDC Minn 2018Angular Unit Testing NDC Minn 2018
Angular Unit Testing NDC Minn 2018
Justin James
 
StirTrek 2018 - Rapid API Development with Sails
StirTrek 2018 - Rapid API Development with SailsStirTrek 2018 - Rapid API Development with Sails
StirTrek 2018 - Rapid API Development with Sails
Justin James
 
Mobile Dev For Web Devs
Mobile Dev For Web DevsMobile Dev For Web Devs
Mobile Dev For Web Devs
Justin James
 
Angular Unit Testing from the Trenches
Angular Unit Testing from the TrenchesAngular Unit Testing from the Trenches
Angular Unit Testing from the Trenches
Justin James
 
Everyone is a Public Speaker
Everyone is a Public SpeakerEveryone is a Public Speaker
Everyone is a Public Speaker
Justin James
 
Visual Studio Tools for Apache Cordova (TACO) and Ionic
Visual Studio Tools for Apache Cordova (TACO) and IonicVisual Studio Tools for Apache Cordova (TACO) and Ionic
Visual Studio Tools for Apache Cordova (TACO) and Ionic
Justin James
 
Ionic - Revolutionizing Hybrid Mobile Application Development
Ionic - Revolutionizing Hybrid Mobile Application DevelopmentIonic - Revolutionizing Hybrid Mobile Application Development
Ionic - Revolutionizing Hybrid Mobile Application Development
Justin James
 
Chocolatey - making the process of installing software on windows easy as pie
Chocolatey - making the process of installing software on windows easy as pieChocolatey - making the process of installing software on windows easy as pie
Chocolatey - making the process of installing software on windows easy as pie
Justin James
 
Nuget is easier than you think and you should be using it as both a consumer ...
Nuget is easier than you think and you should be using it as both a consumer ...Nuget is easier than you think and you should be using it as both a consumer ...
Nuget is easier than you think and you should be using it as both a consumer ...
Justin James
 

More from Justin James (10)

KCDC 2018 - Rapid API Development with Sails
KCDC 2018 - Rapid API Development with SailsKCDC 2018 - Rapid API Development with Sails
KCDC 2018 - Rapid API Development with Sails
 
Angular Unit Testing NDC Minn 2018
Angular Unit Testing NDC Minn 2018Angular Unit Testing NDC Minn 2018
Angular Unit Testing NDC Minn 2018
 
StirTrek 2018 - Rapid API Development with Sails
StirTrek 2018 - Rapid API Development with SailsStirTrek 2018 - Rapid API Development with Sails
StirTrek 2018 - Rapid API Development with Sails
 
Mobile Dev For Web Devs
Mobile Dev For Web DevsMobile Dev For Web Devs
Mobile Dev For Web Devs
 
Angular Unit Testing from the Trenches
Angular Unit Testing from the TrenchesAngular Unit Testing from the Trenches
Angular Unit Testing from the Trenches
 
Everyone is a Public Speaker
Everyone is a Public SpeakerEveryone is a Public Speaker
Everyone is a Public Speaker
 
Visual Studio Tools for Apache Cordova (TACO) and Ionic
Visual Studio Tools for Apache Cordova (TACO) and IonicVisual Studio Tools for Apache Cordova (TACO) and Ionic
Visual Studio Tools for Apache Cordova (TACO) and Ionic
 
Ionic - Revolutionizing Hybrid Mobile Application Development
Ionic - Revolutionizing Hybrid Mobile Application DevelopmentIonic - Revolutionizing Hybrid Mobile Application Development
Ionic - Revolutionizing Hybrid Mobile Application Development
 
Chocolatey - making the process of installing software on windows easy as pie
Chocolatey - making the process of installing software on windows easy as pieChocolatey - making the process of installing software on windows easy as pie
Chocolatey - making the process of installing software on windows easy as pie
 
Nuget is easier than you think and you should be using it as both a consumer ...
Nuget is easier than you think and you should be using it as both a consumer ...Nuget is easier than you think and you should be using it as both a consumer ...
Nuget is easier than you think and you should be using it as both a consumer ...
 

Recently uploaded

Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
Fermin Galan
 
Introduction to Pygame (Lecture 7 Python Game Development)
Introduction to Pygame (Lecture 7 Python Game Development)Introduction to Pygame (Lecture 7 Python Game Development)
Introduction to Pygame (Lecture 7 Python Game Development)
abdulrafaychaudhry
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
Hornet Dynamics
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
timtebeek1
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
Donna Lenk
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
Globus
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
Aftab Hussain
 
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
Alina Yurenko
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
Deuglo Infosystem Pvt Ltd
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
Adele Miller
 
AI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website CreatorAI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website Creator
Google
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Mind IT Systems
 
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
ShamsuddeenMuhammadA
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
Aftab Hussain
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Łukasz Chruściel
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke
 

Recently uploaded (20)

Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
 
Introduction to Pygame (Lecture 7 Python Game Development)
Introduction to Pygame (Lecture 7 Python Game Development)Introduction to Pygame (Lecture 7 Python Game Development)
Introduction to Pygame (Lecture 7 Python Game Development)
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
 
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
 
AI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website CreatorAI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website Creator
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
 
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
 

Up and Running with Angular

Editor's Notes

  1. done
  2. Background 63 63 63 Var 239 220 188 Mario = 204 147 147 Base color white Comments 127 159 127 Function 227 206 171
  3. Modules – building blocks that contain routes, components, services, and more. Components – contains a template, data and logic forming part of a DOM tree. Routing – Renders a component based on the URL state, drives navigation. Services – Data layer, logic that is not component related, such as API requests.
  4. The arrows indicate the direction data is traveling. {{ }} – standard data binding like we had in Angular 1 but now 1 way data binding by default. [property] – ability to bind to any html attribute or property (event) – can hook into any HTML event like click or onchange. No need for ng-click anymore [(ngModel)] – two way data binding
  5. The arrows indicate the direction data is traveling. {{ }} – standard data binding like we had in Angular 1 but now 1 way data binding by default. [property] – ability to bind to any html attribute or property (event) – can hook into any HTML event like click or onchange. No need for ng-click anymore [(ngModel)] – two way data binding
  6. The arrows indicate the direction data is traveling. {{ }} – standard data binding like we had in Angular 1 but now 1 way data binding by default. [property] – ability to bind to any html attribute or property (event) – can hook into any HTML event like click or onchange. No need for ng-click anymore [(ngModel)] – two way data binding
  7. The arrows indicate the direction data is traveling. {{ }} – standard data binding like we had in Angular 1 but now 1 way data binding by default. [property] – ability to bind to any html attribute or property (event) – can hook into any HTML event like click or onchange. No need for ng-click anymore [(ngModel)] – two way data binding
  8. Events – input, blur, click,
  9. Events – input, blur, click,
  10. Events – input, blur, click,
  11. Events – input, blur, click,
  12. Done http://sailsjs.com/get-started
  13. In forms, there are three main building blocks: FormControl, FormGroup, and FormArray In Angular, the form control's model is tracked in something called a FormControl(). It’s one of the three building blocks of Angular forms. FormGroups are collections of FormControl instances, registered by name. A form itself is simply a FormGroup. The last building block is the FormArray. Like FormGroup, it consists of child controls, but registered by index as an array. This is a good model if you have children of unknown or dynamic length.
  14. In Angular, the form control's model is tracked in something called a FormControl(). It’s one of the three building blocks of Angular forms.
  15. Sometimes you’ll have form controls that make more sense to conceptualize as a group - for instance, an address. FormGroups are collections of FormControl instances, registered by name.
  16. The last building block is the FormArray. Like FormGroup, it consists of child controls, but registered by index as an array. This is a good model if you have children of unknown or dynamic length.
  17. There are two available forms modules: the FormsModule (also known as Template Driven or Angular 1 style forms) and the ReactiveFormsModule (also known as reactive forms). But before we talk about their differences, let’s start by discussing some of the underlying structure that both modules have in common.
  18. The forms module is Angular 1 style, so everything goes through the template. Your changes are made through directives, so you won’t be instantiating FormControls, FormGroups, or FormArrays directly. This will be done implicitly for you by the directives and their inputs. Tends to be easier at the beginning but harder as you try to tackle more complex concepts. For instance, in order to maintain unidirectional data flow in the template, template-driven forms have to be asynchronous.This can lead to the normal gotchas associated with async in development and testing. In reactive forms, you explicitly instantiate the FormControls and FormGroups as needed. You’re directly manipulating the form control models in the component class yourself. This is an investment up front, and often more boilerplate, but it’s also more explicit. There’s no magic going on under the hood and you’re not constrained by the template. For this reason, reactive forms tend to behave more predictably. Everything can be synchronous and as you might imagine, it’s easier to feed into reactive patterns because you’re working in the class without the template in the middle. That being said, these are both legitimate approaches based on your coding style and your preferences, so it’s really up to you what’s right for your application.
  19. Done
  20. Done http://sailsjs.com/documentation/concepts/assets/disabling-grunt http://sailsjs.com/documentation/concepts http://sailsjs.com/documentation/concepts/configuration/the-local-js-file https://www.manning.com/books/sails-js-in-action