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

243329387 angular-docs
243329387 angular-docs243329387 angular-docs
243329387 angular-docsAbhi166803
 
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 IonicMorris Singer
 
jQuery Conference Austin Sept 2013
jQuery Conference Austin Sept 2013jQuery Conference Austin Sept 2013
jQuery Conference Austin Sept 2013dmethvin
 
Shaping up with angular JS
Shaping up with angular JSShaping up with angular JS
Shaping up with angular JSBrajesh Yadav
 
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 JSDeepu S Nath
 
Game Development Using HTML 5
Game Development Using HTML 5Game Development Using HTML 5
Game Development Using HTML 5osa_ora
 
AngularJS Basics
AngularJS BasicsAngularJS Basics
AngularJS BasicsRavi Mone
 
Angular js vs. Facebook react
Angular js vs. Facebook reactAngular js vs. Facebook react
Angular js vs. Facebook reactKeyup
 
One Weekend With AngularJS
One Weekend With AngularJSOne Weekend With AngularJS
One Weekend With AngularJSYashobanta Bai
 
AngularJS best-practices
AngularJS best-practicesAngularJS best-practices
AngularJS best-practicesHenry Tao
 
State of jQuery June 2013 - Portland
State of jQuery June 2013 - PortlandState of jQuery June 2013 - Portland
State of jQuery June 2013 - Portlanddmethvin
 
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)Gary Arora
 
AngularJS Introduction
AngularJS IntroductionAngularJS Introduction
AngularJS IntroductionBrajesh 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

Angular.js - JS Camp UKraine 2013
Angular.js - JS Camp UKraine 2013Angular.js - JS Camp UKraine 2013
Angular.js - JS Camp UKraine 2013Max Klymyshyn
 
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.jsAlmog Koren
 
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.jsDieter De Mesmaeker
 
Building scalable applications with angular js
Building scalable applications with angular jsBuilding scalable applications with angular js
Building scalable applications with angular jsAndrew Alpert
 
Introduction To Angular.js - SpringPeople
Introduction To Angular.js - SpringPeopleIntroduction To Angular.js - SpringPeople
Introduction To Angular.js - SpringPeopleSpringPeople
 
Introduction to angular 2
Introduction to angular 2Introduction to angular 2
Introduction to angular 2Dor Moshe
 
Angular 2 Crash Course
Angular  2 Crash CourseAngular  2 Crash Course
Angular 2 Crash CourseElisha Kramer
 
Building Universal Applications with Angular 2
Building Universal Applications with Angular 2Building Universal Applications with Angular 2
Building Universal Applications with Angular 2Minko Gechev
 

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, A dive to concepts
Angular JS, A dive to conceptsAngular JS, A dive to concepts
Angular JS, A dive to conceptsAbhishek Sur
 
Angular JS - Introduction
Angular JS - IntroductionAngular JS - Introduction
Angular JS - IntroductionSagar Acharya
 
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 appsclimboid
 
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 GroupManuel Kießling
 
Integrating AngularJS into the Campus CMS
Integrating AngularJS into the Campus CMSIntegrating AngularJS into the Campus CMS
Integrating AngularJS into the Campus CMSTom Borger
 
Beginning jQuery Mobile
Beginning jQuery MobileBeginning jQuery Mobile
Beginning jQuery MobileTroy Miles
 
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)ColdFusionConference
 
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.ioPaul Knittel
 
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 PlatformApigee | Google Cloud
 
ME vs WEB - AngularJS Fundamentals
ME vs WEB - AngularJS FundamentalsME vs WEB - AngularJS Fundamentals
ME vs WEB - AngularJS FundamentalsAviran Cohen
 
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 UIMarcin 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 FrameworkTroy Miles
 
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 SpaghettiJared Faris
 
TOC Workshop 2013
TOC Workshop 2013TOC Workshop 2013
TOC Workshop 2013Haig Armen
 

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

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

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

Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
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...Martijn de Jong
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
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)wesley chun
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
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 2024The Digital Insurer
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
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 productivityPrincipled Technologies
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
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 2024The Digital Insurer
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 

Recently uploaded (20)

Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
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...
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
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)
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
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
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 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
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
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
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 

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.