SlideShare a Scribd company logo
1 of 58
Download to read offline
Building Better Web Apps 

with Angular.js
@KatrinaBekessy Director, Technology & Design!
@IanMacDowell Sr. Open Standards Developer!
!
#angularsx
http://bit.ly/angularsx
The Plan
Angular: What’s the Deal? [20 min.]!
Core Components of Angular [30 min.]!
Let’s build something! [60 min.]!
Make it real time [15 min.]!
Wrap up [10 min.]!
How might you build a Mad Libs app?
Angular: what’s the deal?
Web Apps Have Evolved
The web can
do stuff.
“Web 2.0!”
 A viable 
non-native option.
An elegant
non-native option.
Advanced front-end framework for building modern web applications!
!
Created in 2009 by Google developers to solve their own problem!
!
It’s smart. Truly leverages JavaScript’s prototypical nature to take care of things
so your own code won’t have to.!
The MEAN Stack


MongoDB, Express.js, Angular.js, Node.js!
SPAs
(Single Page Applications)
Need some “magic” to make them work without a bunch of spaghetti code!
Dynamic Data
Updating views every time data updates get clunky!
Utility Apps
Managing states and frequent user input is hard with so much event handling!




“As I mentioned, we ended up using Knockout because,
for our project, focusing on view binding was more
important. We also ended up using RequireJS for
modularization, crossroads and Hasher to handle routing
and history, Jasmine for testing, as well as JQuery,
Twitter Bootstrap, and Underscore.js (and probably more
libraries I'm forgetting at the moment).”





“As I mentioned, we ended up using Knockout because,
for our project, focusing on view binding was more
important. We also ended up using RequireJS for
modularization, crossroads and Hasher to handle routing
and history, Jasmine for testing, as well as JQuery,
Twitter Bootstrap, and Underscore.js (and probably more
libraries I'm forgetting at the moment).”





“As I mentioned, we ended up using Knockout because,
for our project, focusing on view binding was more
important. We also ended up using RequireJS for
modularization, crossroads and Hasher to handle routing
and history, Jasmine for testing, as well as JQuery,
Twitter Bootstrap, and Underscore.js (and probably more
libraries I'm forgetting at the moment).”





“As I mentioned, we ended up using Knockout because,
for our project, focusing on view binding was more
important. We also ended up using RequireJS for
modularization, crossroads and Hasher to handle routing
and history, Jasmine for testing, as well as JQuery,
Twitter Bootstrap, and Underscore.js (and probably more
libraries I'm forgetting at the moment).”





“As I mentioned, we ended up using Knockout because,
for our project, focusing on view binding was more
important. We also ended up using RequireJS for
modularization, crossroads and Hasher to handle routing
and history, Jasmine for testing, as well as JQuery,
Twitter Bootstrap, and Underscore.js (and probably more
libraries I'm forgetting at the moment).”





“As I mentioned, we ended up using Knockout because,
for our project, focusing on view binding was more
important. We also ended up using RequireJS for
modularization, crossroads and Hasher to handle routing
and history, Jasmine for testing, as well as JQuery,
Twitter Bootstrap, and Underscore.js (and probably more
libraries I'm forgetting at the moment).”





“As I mentioned, we ended up using Knockout because,
for our project, focusing on view binding was more
important. We also ended up using RequireJS for
modularization, crossroads and Hasher to handle routing
and history, Jasmine for testing, as well as JQuery,
Twitter Bootstrap, and Underscore.js (and probably more
libraries I'm forgetting at the moment).”





“As I mentioned, we ended up using Knockout because,
for our project, focusing on view binding was more
important. We also ended up using RequireJS for
modularization, crossroads and Hasher to handle routing
and history, Jasmine for testing, as well as JQuery,
Twitter Bootstrap, and Underscore.js (and probably more
libraries I'm forgetting at the moment).”

Maintainability!
Angular’s Approach
The Views call the shots. Angular gives HTML the power to drive the app.!
!
Declarative programming (focus on the what, not the how)!
!
Enforce modularity and separation of concerns, but make it easy for all the parts
to work together.!
!
Emphasis on testing, and making testing easy!
HTML on Steroids
Angular extends the capabilities of HTML, by sprinkling new attributes throughout
the DOM.!
!
For example:!
!
!
<body	
  ng-­‐app=“myApp”>	
  
	
  	
  	
  	
  <div	
  ng-­‐controller=“myController”>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <button	
  ng-­‐click=“doSomething()”>Click	
  me!</button>	
  
	
  	
  	
  	
  </div>	
  
</body>	
  
OK, but how?

With great power…
http://www.bennadel.com/resources/uploads/2013/feelings_about_angularjs_over_time.png!
Magic Trick #1: 

Two-Way Data Binding
View!
Merge
Once!
Template! Model!
View!
Template!
Model!
Constant
Updates!
One-Way Data Binding! Two-Way Data Binding!
Magic Trick #2:

The Angular $scope
•  The glue that holds it all together!
•  Maintains states and keeps things contained throughout the DOM!
•  Enables the View to function as the Model!
!
!
In our controller:
	
  	
  	
  	
  $scope.myData	
  =	
  ‘someValue’;	
  
	
  
In our view:
	
  	
  	
  	
  <input	
  type=“text”	
  ng-­‐model=“myData”	
  />	
  
	
  	
  	
  	
  <p>{{myData}}</p>	
  
The magic $scope
Source: http://devgirl.org/wp-content/uploads/2013/03/concepts-controller.png!
Scopes can be nested
•  Apps have exactly one $rootScope to rule them all.!
•  Views can have multiple children scopes. They can be nested and tend to
follow the nesting of DOM elements.!
!
! <body	
  ng-­‐app=“myAppName”>	
  
<div	
  ng-­‐controller=“myController”>	
  
	
  	
  	
  	
  <ul>	
  
<li	
  ng-­‐repeat=“item	
  in	
  items”>	
  
<li	
  ng-­‐repeat=“item	
  in	
  items”>	
  
<li	
  ng-­‐repeat=“item	
  in	
  items”>	
  
$scope!
$scope.items= […]!
$scope.item=‘item1’!
$scope.item=‘item2’!
$scope.item=‘item3’!
Magic Trick #3:

Dependency Injection
•  State what you need, not how you need to get it.!
•  Makes objects and modules easily interchangeable!
!
!
	
  
var	
  app	
  =	
  angular.module(‘myAppName’,	
  [‘dependency1’,	
  ‘dependency2’,	
  …]);	
  
Key Components of Angular
Main Concepts
Views and Routes: getting your app to load!
!
Directives and Filters: sprinkling the DOM with special sauce!
!
Angular Modules: giving the Views what they need!
!
Angular’s Cycles: the “engine” that keeps it all running!
!
!
Views and Routes
It starts with Views
•  Angular extends HTML by providing new functionality with special DOM
elements, attributes, and classes!
•  View dictates the Model!
•  Partial Views can be loaded in as needed and inherit the current $scope	
  
In our index.html:!
<body	
  ng-­‐app=“myAppName”>	
  
	
  	
  	
  	
  <div	
  ng-­‐view></div>	
  
</body>	
  
Routes
•  Angular ships with a built-in $routeProvider!
•  Supports apps by getting necessary files to assemble the layout based on URL!
!
var	
  app	
  =	
  angular.module(‘myAppName’,	
  [‘ngRoute’]);	
  
	
  
app.config([‘$routeProvider’,	
  
	
  	
  function($routeProvider)	
  {	
  
	
  	
  	
  	
  $routeProvider	
  
	
  	
  	
  	
  	
  	
  .when(‘/foo’,	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  templateUrl:	
  ‘views/foo.html’,	
  
	
  	
  	
  	
  	
  	
  	
  	
  controller:	
  ‘fooController’	
  
	
  	
  	
  	
  	
  	
  })	
  
	
  	
  	
  	
  	
  	
  .when(‘/bar’,	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  templateUrl:	
  ‘views/bar.html’,	
  
	
  	
  	
  	
  	
  	
  	
  	
  controller:	
  ‘barController’	
  
	
  	
  	
  	
  	
  	
  })	
  
}]);	
  
Directives and Filters
Directives
•  Directives are the markers in the DOM that allow the view to tell the controllers
what they need (usually using the ‘ng’ prefix)!
•  Handle behaviors and transformations of the DOM and connect the DOM to
Angular’s capabilities.!
•  Transform elements, attach events, and bind the Scope.!
•  Easy to write custom Directives to manage behavior specific for your app.!
!
a!
form!
input!
input[checkbox]!
input[email]!
input[number]!
input[radio]!
input[text]!
input[url]!
ngAnimate!
ngApp!
ngBind!
ngBindHtml!
ngBindTemplate!
ngBlur!
ngChange!
ngChecked!
ngClass!
ngClassEven!
ngClassOdd!
ngClick!
!
ngCloak!
ngController!
ngCopy!
ngCsp!
ngCut!
ngDblclick!
ngDisabled!
ngFocus!
ngForm!
ngHide!
ngHref!
ngInclude!
ngInit!
ngKeydown!
ngKeypress!
ngKeyup!
ngList!
ngModel!
ngMousedown!
ngMouseenter!
ngMouseleave!
!
ngMousemove!
ngMouseover!
ngMouseup!
ngNonBindable!
ngOpen!
ngPaste!
ngPluralize!
ngReadonly!
ngRepeat!
ngSelected!
ngShow!
ngSrc!
ngSrcset!
ngStyle!
ngSubmit!
ngSwitch!
ngTransclude!
ngValue!
script!
select!
textarea!
Filters
•  Help with special formatting!
•  Can be used in Views, Controllers, and Services!
•  Easy to build custom filters!
In the Controller:!
	
  	
  	
  	
  $scope.amount	
  =	
  4321.99;	
  
	
  	
  	
  	
  $scope.name	
  =	
  ‘bobby’;	
  
	
  
In	
  the	
  View:	
  
	
  	
  	
  	
  <span>{{amount	
  |	
  currency}}</span>	
  //	
  $4,321.99	
  
	
  	
  	
  	
  <span>{{name	
  |	
  uppercase}}</span>	
  	
  //	
  BOBBY 	
  	
  
	
  
Angular Modules
Everything is a type of Module
MODULES
Config Factory Controllers Directives Filters
Routes Service
Provider
Values/
Constants
Main App Wrapper Module
•  Creates a shell that we can chain other modules to!
•  Typically declare the app in the <html> or <body> tags, but can put it
anywhere!
!
In our View:
	
  	
  	
  	
  	
  <html	
  ng-­‐app=‘myAppName’>	
  

In our JS
var	
  app	
  =	
  angular.module(‘myAppName’,	
  [‘dependency1’,‘dependency2’]);	
  
	
  	
  	
  	
  
Other Modules attach to the app
•  Register all other modules as part of your main app!
•  Order or where the modules are located doesn’t matter!
!
var	
  app	
  =	
  angular.module(‘myAppName’,	
  [‘ngRoute’,	
  ‘myService’]);	
  


Register a Factory Module:
	
  	
  	
  	
  app.factory(‘myService’,	
  function	
  ()	
  {	
  
	
  	
  	
  	
  	
  	
  return	
  something;	
  
	
  	
  	
  	
  });	
  
	
  
Register a Controller Module:!
	
  	
  	
  	
  app.controller(‘myController’,	
  [‘$scope’,	
  
	
  function	
  ($scope)	
  {...}	
  
	
  	
  	
  	
  ]);	
  
Angular’s Cycles
Angular’s HTML Compiler
•  Enables new capabilities of the DOM!
•  Runs in 2 phases:!
•  Compile: traverse the DOM and note all the directives!
•  Link: hook up the directives with a scope, produce a live view!
Digest Cycles
Angular runs its own digest cycles in
addition to the browser’s event loop!
!
2 main steps:!
•  $watch observes changes to the
view and scope!
•  $apply pushes changes that need
to be made!
!
http://docs.angularjs.org/img/guide/concepts-runtime.png!
Getting it all working is an art form.
http://nathanleclaire.com/images/smooth-angular-tips/js-learning-curves.jpeg!
Let’s build something!

!
Nerd Libs!
•  Mad Libs game built as a SPA!
•  Try it out: https://angularsxsw.firebaseapp.com!
Setup and Tooling
•  Grab the code: http://bit.ly/angularsx!
•  Install Batarang Chrome Extenstion!
•  Make sure you have a local server ready (Node, Grunt, Mamp, etc.)!
How do I “think” in Angular?
•  Start with your data and Models!
•  Set up your Routes!
•  Create your Services!
•  Get Controllers for each View!
•  Create Views (HTML templates)!
•  Add directives and event handlers for behaviors!
!
Getting Real (Time)
Firebase is Cool
•  Database as a Service!
•  3-Way data binding!
•  Near real time updates!
•  Built-in RESTful API!
•  Firebase Forge!
Thank You.
Building Better Web Apps with Angular.js (SXSW 2014)

More Related Content

What's hot

AngularJS Introduction
AngularJS IntroductionAngularJS Introduction
AngularJS Introduction
Brajesh Yadav
 

What's hot (20)

243329387 angular-docs
243329387 angular-docs243329387 angular-docs
243329387 angular-docs
 
Ionic으로 모바일앱 만들기 #3
Ionic으로 모바일앱 만들기 #3Ionic으로 모바일앱 만들기 #3
Ionic으로 모바일앱 만들기 #3
 
Building Mobile Applications with Ionic
Building Mobile Applications with IonicBuilding Mobile Applications with Ionic
Building Mobile Applications with Ionic
 
jQuery Conference Austin Sept 2013
jQuery Conference Austin Sept 2013jQuery Conference Austin Sept 2013
jQuery Conference Austin Sept 2013
 
Shaping up with angular JS
Shaping up with angular JSShaping up with angular JS
Shaping up with angular JS
 
Intro to UI-Router/TypeScript
Intro to UI-Router/TypeScriptIntro to UI-Router/TypeScript
Intro to UI-Router/TypeScript
 
TOSSUG HTML5 讀書會 新標籤與表單
TOSSUG HTML5 讀書會 新標籤與表單TOSSUG HTML5 讀書會 新標籤與表單
TOSSUG HTML5 讀書會 新標籤與表單
 
Coffee@DBG - Exploring Angular JS
Coffee@DBG - Exploring Angular JSCoffee@DBG - Exploring Angular JS
Coffee@DBG - Exploring Angular JS
 
Game Development Using HTML 5
Game Development Using HTML 5Game Development Using HTML 5
Game Development Using HTML 5
 
Angular - Beginner
Angular - BeginnerAngular - Beginner
Angular - Beginner
 
AngularJS Basics
AngularJS BasicsAngularJS Basics
AngularJS Basics
 
Angular js vs. Facebook react
Angular js vs. Facebook reactAngular js vs. Facebook react
Angular js vs. Facebook react
 
AngularJS
AngularJSAngularJS
AngularJS
 
Introduction to AngularJS
Introduction to AngularJSIntroduction to AngularJS
Introduction to AngularJS
 
One Weekend With AngularJS
One Weekend With AngularJSOne Weekend With AngularJS
One Weekend With AngularJS
 
AngularJS best-practices
AngularJS best-practicesAngularJS best-practices
AngularJS best-practices
 
State of jQuery June 2013 - Portland
State of jQuery June 2013 - PortlandState of jQuery June 2013 - Portland
State of jQuery June 2013 - Portland
 
AngularJS - What is it & Why is it awesome ? (with demos)
AngularJS - What is it & Why is it awesome ? (with demos)AngularJS - What is it & Why is it awesome ? (with demos)
AngularJS - What is it & Why is it awesome ? (with demos)
 
Introduction to Angularjs
Introduction to AngularjsIntroduction to Angularjs
Introduction to Angularjs
 
AngularJS Introduction
AngularJS IntroductionAngularJS Introduction
AngularJS Introduction
 

Viewers also liked

Viewers also liked (9)

Angular.js - JS Camp UKraine 2013
Angular.js - JS Camp UKraine 2013Angular.js - JS Camp UKraine 2013
Angular.js - JS Camp UKraine 2013
 
Google Developer Groups, Why We Choose Angular.js
Google Developer Groups, Why We Choose Angular.jsGoogle Developer Groups, Why We Choose Angular.js
Google Developer Groups, Why We Choose Angular.js
 
Building single page applications with angular.js
Building single page applications with angular.jsBuilding single page applications with angular.js
Building single page applications with angular.js
 
Building scalable applications with angular js
Building scalable applications with angular jsBuilding scalable applications with angular js
Building scalable applications with angular js
 
Introduction To Angular.js - SpringPeople
Introduction To Angular.js - SpringPeopleIntroduction To Angular.js - SpringPeople
Introduction To Angular.js - SpringPeople
 
Introduction to angular 2
Introduction to angular 2Introduction to angular 2
Introduction to angular 2
 
Angular 2 Crash Course
Angular  2 Crash CourseAngular  2 Crash Course
Angular 2 Crash Course
 
Building Universal Applications with Angular 2
Building Universal Applications with Angular 2Building Universal Applications with Angular 2
Building Universal Applications with Angular 2
 
Build Features, Not Apps
Build Features, Not AppsBuild Features, Not Apps
Build Features, Not Apps
 

Similar to Building Better Web Apps with Angular.js (SXSW 2014)

Angular.js Talk at the November Meetup of the BerlinJS User Group
Angular.js Talk at the November Meetup of the BerlinJS User GroupAngular.js Talk at the November Meetup of the BerlinJS User Group
Angular.js Talk at the November Meetup of the BerlinJS User Group
Manuel Kießling
 
Designing and Implementing a Multiuser Apps Platform
Designing and Implementing a Multiuser Apps PlatformDesigning and Implementing a Multiuser Apps Platform
Designing and Implementing a Multiuser Apps Platform
Apigee | Google Cloud
 
React.js - and how it changed our thinking about UI
React.js - and how it changed our thinking about UIReact.js - and how it changed our thinking about UI
React.js - and how it changed our thinking about UI
Marcin Grzywaczewski
 
Cross Platform Mobile Apps with the Ionic Framework
Cross Platform Mobile Apps with the Ionic FrameworkCross Platform Mobile Apps with the Ionic Framework
Cross Platform Mobile Apps with the Ionic Framework
Troy Miles
 

Similar to Building Better Web Apps with Angular.js (SXSW 2014) (20)

Angular JS, A dive to concepts
Angular JS, A dive to conceptsAngular JS, A dive to concepts
Angular JS, A dive to concepts
 
Angular JS - Introduction
Angular JS - IntroductionAngular JS - Introduction
Angular JS - Introduction
 
Yeoman AngularJS and D3 - A solid stack for web apps
Yeoman AngularJS and D3 - A solid stack for web appsYeoman AngularJS and D3 - A solid stack for web apps
Yeoman AngularJS and D3 - A solid stack for web apps
 
Titanium Alloy Tutorial
Titanium Alloy TutorialTitanium Alloy Tutorial
Titanium Alloy Tutorial
 
Angular.js Talk at the November Meetup of the BerlinJS User Group
Angular.js Talk at the November Meetup of the BerlinJS User GroupAngular.js Talk at the November Meetup of the BerlinJS User Group
Angular.js Talk at the November Meetup of the BerlinJS User Group
 
AngularJS 101
AngularJS 101AngularJS 101
AngularJS 101
 
Integrating AngularJS into the Campus CMS
Integrating AngularJS into the Campus CMSIntegrating AngularJS into the Campus CMS
Integrating AngularJS into the Campus CMS
 
Beginning jQuery Mobile
Beginning jQuery MobileBeginning jQuery Mobile
Beginning jQuery Mobile
 
Crash Course in AngularJS + Ionic (Deep dive)
Crash Course in AngularJS + Ionic (Deep dive)Crash Course in AngularJS + Ionic (Deep dive)
Crash Course in AngularJS + Ionic (Deep dive)
 
Introduction to Ember.js and how we used it at FlowPro.io
Introduction to Ember.js and how we used it at FlowPro.ioIntroduction to Ember.js and how we used it at FlowPro.io
Introduction to Ember.js and how we used it at FlowPro.io
 
Angular Js
Angular JsAngular Js
Angular Js
 
SF Cordova Meetup
SF Cordova MeetupSF Cordova Meetup
SF Cordova Meetup
 
Designing and Implementing a Multiuser Apps Platform
Designing and Implementing a Multiuser Apps PlatformDesigning and Implementing a Multiuser Apps Platform
Designing and Implementing a Multiuser Apps Platform
 
ME vs WEB - AngularJS Fundamentals
ME vs WEB - AngularJS FundamentalsME vs WEB - AngularJS Fundamentals
ME vs WEB - AngularJS Fundamentals
 
Jquery Mobile
Jquery MobileJquery Mobile
Jquery Mobile
 
jQuery Mobile
jQuery MobilejQuery Mobile
jQuery Mobile
 
React.js - and how it changed our thinking about UI
React.js - and how it changed our thinking about UIReact.js - and how it changed our thinking about UI
React.js - and how it changed our thinking about UI
 
Cross Platform Mobile Apps with the Ionic Framework
Cross Platform Mobile Apps with the Ionic FrameworkCross Platform Mobile Apps with the Ionic Framework
Cross Platform Mobile Apps with the Ionic Framework
 
Building Rich User Experiences Without JavaScript Spaghetti
Building Rich User Experiences Without JavaScript SpaghettiBuilding Rich User Experiences Without JavaScript Spaghetti
Building Rich User Experiences Without JavaScript Spaghetti
 
TOC Workshop 2013
TOC Workshop 2013TOC Workshop 2013
TOC Workshop 2013
 

More from kbekessy (7)

Nj Transit
Nj TransitNj Transit
Nj Transit
 
Precedent Research
Precedent ResearchPrecedent Research
Precedent Research
 
Peer Review Presentation
Peer Review PresentationPeer Review Presentation
Peer Review Presentation
 
Midterm Presentation
Midterm PresentationMidterm Presentation
Midterm Presentation
 
Fall Final Presentation
Fall Final PresentationFall Final Presentation
Fall Final Presentation
 
Early Experimentation
Early ExperimentationEarly Experimentation
Early Experimentation
 
Early Concepts
Early ConceptsEarly Concepts
Early Concepts
 

Recently uploaded

Recently uploaded (20)

Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 

Building Better Web Apps with Angular.js (SXSW 2014)

  • 1. Building Better Web Apps 
 with Angular.js
  • 2. @KatrinaBekessy Director, Technology & Design! @IanMacDowell Sr. Open Standards Developer! ! #angularsx
  • 4. The Plan Angular: What’s the Deal? [20 min.]! Core Components of Angular [30 min.]! Let’s build something! [60 min.]! Make it real time [15 min.]! Wrap up [10 min.]!
  • 5. How might you build a Mad Libs app?
  • 7. Web Apps Have Evolved The web can do stuff. “Web 2.0!” A viable non-native option. An elegant non-native option.
  • 8. Advanced front-end framework for building modern web applications! ! Created in 2009 by Google developers to solve their own problem! ! It’s smart. Truly leverages JavaScript’s prototypical nature to take care of things so your own code won’t have to.!
  • 9. The MEAN Stack
 MongoDB, Express.js, Angular.js, Node.js!
  • 10. SPAs
(Single Page Applications) Need some “magic” to make them work without a bunch of spaghetti code!
  • 11. Dynamic Data Updating views every time data updates get clunky!
  • 12. Utility Apps Managing states and frequent user input is hard with so much event handling!
  • 13.
  • 14. 
 
 “As I mentioned, we ended up using Knockout because, for our project, focusing on view binding was more important. We also ended up using RequireJS for modularization, crossroads and Hasher to handle routing and history, Jasmine for testing, as well as JQuery, Twitter Bootstrap, and Underscore.js (and probably more libraries I'm forgetting at the moment).”

  • 15. 
 
 “As I mentioned, we ended up using Knockout because, for our project, focusing on view binding was more important. We also ended up using RequireJS for modularization, crossroads and Hasher to handle routing and history, Jasmine for testing, as well as JQuery, Twitter Bootstrap, and Underscore.js (and probably more libraries I'm forgetting at the moment).”

  • 16. 
 
 “As I mentioned, we ended up using Knockout because, for our project, focusing on view binding was more important. We also ended up using RequireJS for modularization, crossroads and Hasher to handle routing and history, Jasmine for testing, as well as JQuery, Twitter Bootstrap, and Underscore.js (and probably more libraries I'm forgetting at the moment).”

  • 17. 
 
 “As I mentioned, we ended up using Knockout because, for our project, focusing on view binding was more important. We also ended up using RequireJS for modularization, crossroads and Hasher to handle routing and history, Jasmine for testing, as well as JQuery, Twitter Bootstrap, and Underscore.js (and probably more libraries I'm forgetting at the moment).”

  • 18. 
 
 “As I mentioned, we ended up using Knockout because, for our project, focusing on view binding was more important. We also ended up using RequireJS for modularization, crossroads and Hasher to handle routing and history, Jasmine for testing, as well as JQuery, Twitter Bootstrap, and Underscore.js (and probably more libraries I'm forgetting at the moment).”

  • 19. 
 
 “As I mentioned, we ended up using Knockout because, for our project, focusing on view binding was more important. We also ended up using RequireJS for modularization, crossroads and Hasher to handle routing and history, Jasmine for testing, as well as JQuery, Twitter Bootstrap, and Underscore.js (and probably more libraries I'm forgetting at the moment).”

  • 20. 
 
 “As I mentioned, we ended up using Knockout because, for our project, focusing on view binding was more important. We also ended up using RequireJS for modularization, crossroads and Hasher to handle routing and history, Jasmine for testing, as well as JQuery, Twitter Bootstrap, and Underscore.js (and probably more libraries I'm forgetting at the moment).”

  • 21. 
 
 “As I mentioned, we ended up using Knockout because, for our project, focusing on view binding was more important. We also ended up using RequireJS for modularization, crossroads and Hasher to handle routing and history, Jasmine for testing, as well as JQuery, Twitter Bootstrap, and Underscore.js (and probably more libraries I'm forgetting at the moment).”

  • 23. Angular’s Approach The Views call the shots. Angular gives HTML the power to drive the app.! ! Declarative programming (focus on the what, not the how)! ! Enforce modularity and separation of concerns, but make it easy for all the parts to work together.! ! Emphasis on testing, and making testing easy!
  • 24. HTML on Steroids Angular extends the capabilities of HTML, by sprinkling new attributes throughout the DOM.! ! For example:! ! ! <body  ng-­‐app=“myApp”>          <div  ng-­‐controller=“myController”>                  <button  ng-­‐click=“doSomething()”>Click  me!</button>          </div>   </body>  
  • 27. Magic Trick #1: 
 Two-Way Data Binding View! Merge Once! Template! Model! View! Template! Model! Constant Updates! One-Way Data Binding! Two-Way Data Binding!
  • 28. Magic Trick #2:
 The Angular $scope •  The glue that holds it all together! •  Maintains states and keeps things contained throughout the DOM! •  Enables the View to function as the Model! ! ! In our controller:        $scope.myData  =  ‘someValue’;     In our view:        <input  type=“text”  ng-­‐model=“myData”  />          <p>{{myData}}</p>  
  • 29. The magic $scope Source: http://devgirl.org/wp-content/uploads/2013/03/concepts-controller.png!
  • 30. Scopes can be nested •  Apps have exactly one $rootScope to rule them all.! •  Views can have multiple children scopes. They can be nested and tend to follow the nesting of DOM elements.! ! ! <body  ng-­‐app=“myAppName”>   <div  ng-­‐controller=“myController”>          <ul>   <li  ng-­‐repeat=“item  in  items”>   <li  ng-­‐repeat=“item  in  items”>   <li  ng-­‐repeat=“item  in  items”>   $scope! $scope.items= […]! $scope.item=‘item1’! $scope.item=‘item2’! $scope.item=‘item3’!
  • 31. Magic Trick #3:
 Dependency Injection •  State what you need, not how you need to get it.! •  Makes objects and modules easily interchangeable! ! !   var  app  =  angular.module(‘myAppName’,  [‘dependency1’,  ‘dependency2’,  …]);  
  • 32. Key Components of Angular
  • 33. Main Concepts Views and Routes: getting your app to load! ! Directives and Filters: sprinkling the DOM with special sauce! ! Angular Modules: giving the Views what they need! ! Angular’s Cycles: the “engine” that keeps it all running! ! !
  • 35. It starts with Views •  Angular extends HTML by providing new functionality with special DOM elements, attributes, and classes! •  View dictates the Model! •  Partial Views can be loaded in as needed and inherit the current $scope   In our index.html:! <body  ng-­‐app=“myAppName”>          <div  ng-­‐view></div>   </body>  
  • 36. Routes •  Angular ships with a built-in $routeProvider! •  Supports apps by getting necessary files to assemble the layout based on URL! ! var  app  =  angular.module(‘myAppName’,  [‘ngRoute’]);     app.config([‘$routeProvider’,      function($routeProvider)  {          $routeProvider              .when(‘/foo’,  {                  templateUrl:  ‘views/foo.html’,                  controller:  ‘fooController’              })              .when(‘/bar’,  {                  templateUrl:  ‘views/bar.html’,                  controller:  ‘barController’              })   }]);  
  • 38. Directives •  Directives are the markers in the DOM that allow the view to tell the controllers what they need (usually using the ‘ng’ prefix)! •  Handle behaviors and transformations of the DOM and connect the DOM to Angular’s capabilities.! •  Transform elements, attach events, and bind the Scope.! •  Easy to write custom Directives to manage behavior specific for your app.! !
  • 40. Filters •  Help with special formatting! •  Can be used in Views, Controllers, and Services! •  Easy to build custom filters! In the Controller:!        $scope.amount  =  4321.99;          $scope.name  =  ‘bobby’;     In  the  View:          <span>{{amount  |  currency}}</span>  //  $4,321.99          <span>{{name  |  uppercase}}</span>    //  BOBBY      
  • 42. Everything is a type of Module MODULES Config Factory Controllers Directives Filters Routes Service Provider Values/ Constants
  • 43. Main App Wrapper Module •  Creates a shell that we can chain other modules to! •  Typically declare the app in the <html> or <body> tags, but can put it anywhere! ! In our View:          <html  ng-­‐app=‘myAppName’>   In our JS var  app  =  angular.module(‘myAppName’,  [‘dependency1’,‘dependency2’]);          
  • 44. Other Modules attach to the app •  Register all other modules as part of your main app! •  Order or where the modules are located doesn’t matter! ! var  app  =  angular.module(‘myAppName’,  [‘ngRoute’,  ‘myService’]);   Register a Factory Module:        app.factory(‘myService’,  function  ()  {              return  something;          });     Register a Controller Module:!        app.controller(‘myController’,  [‘$scope’,    function  ($scope)  {...}          ]);  
  • 46. Angular’s HTML Compiler •  Enables new capabilities of the DOM! •  Runs in 2 phases:! •  Compile: traverse the DOM and note all the directives! •  Link: hook up the directives with a scope, produce a live view!
  • 47. Digest Cycles Angular runs its own digest cycles in addition to the browser’s event loop! ! 2 main steps:! •  $watch observes changes to the view and scope! •  $apply pushes changes that need to be made! ! http://docs.angularjs.org/img/guide/concepts-runtime.png!
  • 48. Getting it all working is an art form. http://nathanleclaire.com/images/smooth-angular-tips/js-learning-curves.jpeg!
  • 50. Nerd Libs! •  Mad Libs game built as a SPA! •  Try it out: https://angularsxsw.firebaseapp.com!
  • 51. Setup and Tooling •  Grab the code: http://bit.ly/angularsx! •  Install Batarang Chrome Extenstion! •  Make sure you have a local server ready (Node, Grunt, Mamp, etc.)!
  • 52. How do I “think” in Angular? •  Start with your data and Models! •  Set up your Routes! •  Create your Services! •  Get Controllers for each View! •  Create Views (HTML templates)! •  Add directives and event handlers for behaviors! !
  • 54.
  • 55. Firebase is Cool •  Database as a Service! •  3-Way data binding! •  Near real time updates! •  Built-in RESTful API! •  Firebase Forge!
  • 56.