SlideShare a Scribd company logo
AngularJS 
THE BRIDGE BETWEEN TODAY 
AND tomorrow's WEB
@toddmotto
A look at the web 
▸ Yesterday, where we came from 
▸ Tomorrow, where we’re headed 
▸ Today, what’s available 
▸ Angular, today 
▸ Angular, tomorrow
Rewind
<TABLE WIDTH="100%" CELLPADDING="0" CELLSPACING="0" BORDER="0"> 
<TR> 
<TD COLSPAN="3">Oh my!</TD> 
</TR> 
</TABLE>
<BLINK></BLINK> 
<MARQUEE></MARQUEE>
<center> 
<font size="4">Awesome letters</font> 
</center>
<a href="javascript:window.location='http://www1.myawesomeweb.com'"> 
Enter site! 
</a>
<img src="planets.gif" width="145" height="126" alt="Planets" usemap="#planetmap"> 
<map name="planetmap"> 
<area shape="rect" coords="0,0,82,126" href="sun.htm" alt="Sun"> 
<area shape="circle" coords="90,58,3" href="mercur.htm" alt="Mercury"> 
<area shape="circle" coords="124,58,8" href="venus.htm" alt="Venus"> 
</map>
Where are we 
now?
▸ <video>, <audio> 
▸ WebGL,<canvas> 
▸ getUserMedia 
▸ Geolocation (kinda) 
▸ Fullscreen API 
▸ WebSockets
▸ local and session storage 
▸ History API 
▸ Indexed DB 
▸ Web SQL (kinda) 
▸ Native form validation (required, email etc) 
▸ FormData
▸ Dataset (custom data-*) 
▸ HTML5 semantics 
▸ File/FileReader API 
▸ classList API 
▸ Drag and drop 
▸ postMessage 
▸ contenteditable
And breathe. HTML5 is 
huge.
To make things even more 
difficult for us...
Frameworks and Model- 
View-Whatever
▸ Angular 
▸ Backbone 
▸ Ember 
▸ Knockout 
▸ React
Why 
frameworks?
We're still missing stuff! 
▸ Templates/Encapsulation/Components 
▸ Two-way data binding/Model data 
▸ Promises and Class-like components 
▸ Modules 
▸ Dependency Injection (DI)
So where are we 
going?
Incoming... 
▸ Web Components (HTML5) 
▸ Object.observe (ES7) 
▸ Native Promises (ES6) 
▸ Modules (ES6) 
▸ Classes (ES6)
Web Components 
CUSTOM ELEMENTS
Web Components: Custom Elements 
<google-map latitude="37.77493" longitude="-122.41942"> 
<google-map-marker latitude="37.779" longitude="-122.3892" 
title="Go Giants!"></google-map-marker> 
</google-map>
Web Components 
TEMPLATES
Web Components: Templates 
<template id="google-map"> 
<style> 
:host { 
position: relative; 
} 
#map { 
position: absolute; 
top: 0; 
right: 0; 
bottom: 0; 
left: 0; 
} 
</style> 
<div class="map"> 
<div id="map"></div> 
</div> 
</template>
Web Components 
SHADOW DOM
Web Components: Shadow DOM 
▾<google-map latitude="37.77493" longitude="-122.41942"> 
▾#shadow-root (user-agent) 
<div class="map"> 
<div id="map"> 
<canvas class="map"></canvas> 
</div> 
</div> 
</google-map>
Web Components 
HTML IMPORTS
Web Components: HTML Imports 
<link rel="import" href="../components/google-map.html">
ES7 
OBJECT.OBSERVE()
ES7: Object.observe() 
// html5rocks.com/en/tutorials/es7/observe 
// Let's say we have a model with data 
var model = {}; 
// Which we then observe 
Object.observe(model, function(changes){ 
// This asynchronous callback runs 
changes.forEach(function(change) { 
// Letting us know what changed 
console.log(change.type, change.name, change.oldValue); 
}); 
});
ES6 
PROMISES
ES6: Promises 
// html5rocks.com/en/tutorials/es6/promises 
var promise = new Promise(function(resolve, reject) { 
if (/* everything turned out fine */) { 
resolve('Stuff worked!'); 
} else { 
reject(Error('It broke')); 
} 
}); 
promise.then(function (result) { 
console.log(result); // "Stuff worked!" 
}, function(err) { 
console.log(err); // Error: "It broke" 
});
ES6 
MODULES
ES6: Modules 
// 2ality.com/2014/09/es6-modules-final.html 
//------ lib.js ------ 
export const sqrt = Math.sqrt; 
export function square(x) { 
return x * x; 
} 
export function diag(x, y) { 
return sqrt(square(x) + square(y)); 
} 
//------ main.js ------ 
import { square, diag } from 'lib'; 
console.log(square(11)); // 121 
console.log(diag(4, 3)); // 5
ES6 
CLASSES
ES6: Classes 
// javascriptplayground.com/blog/2014/07/introduction-to-es6-classes-tutorial 
class Model { 
constructor (properties) { 
this.properties = properties; 
} 
toObject() { 
return this.properties; 
} 
}
So... Where's Angular?
Angular 
CUSTOM ELEMENTS
Angular: Custom Elements 
<google-map latitude="37.77493" longitude="-122.41942"> 
<google-map-marker latitude="37.779" longitude="-122.3892" 
title="Go Giants!"></google-map-marker> 
</google-map>
Angular 
TEMPLATES
Angular: Templates 
function googleMap () { 
return { 
scope: { longitude: '=', latitude: '=' }, 
template: [ 
'<div class="map">', 
'<div id="map"></div>', 
'</div>', 
].join('') 
}; 
} 
angular 
.module('app') 
.directive('googleMap', googleMap);
Angular 
"SHADOW DOM"
Angular: "Shadow DOM" 
<google-map latitude="37.77493" longitude="-122.41942"> 
<div class="map"> 
<div id="map"> 
<canvas class="map"></canvas> 
</div> 
</div> 
</google-map>
Angular 
HTML IMPORTS
Angular: HTML Imports 
function googleMap () { 
return { 
scope: { longitude: '=', latitude: '=' }, 
templateUrl: '../google-map.html' 
}; 
} 
angular 
.module('app') 
.directive('googleMap', googleMap);
Angular 
$SCOPE.$WATCH
Angular: $scope.$watch 
function MainCtrl ($scope) { 
$scope.$watch('model', function (newVal, oldVal) { 
// 
}); 
} 
angular 
.module('app') 
.directive('MainCtrl', MainCtrl);
Angular 
PROMISES
Angular: Promises 
$http 
.get('/someurl') 
.then(function (response) { 
// :) 
}, function (reason) { 
// :( 
});
Above and beyond specs 
BUILDING ON TOP OF THE WEB PLATFORM
Angular: Dependency Injection 
function MainCtrl ($scope, $rootScope) { 
} 
angular 
.module('app') 
.controller('MainCtrl', MainCtrl);
Angular: Declarative bindings 
<!-- ng-* --> 
<div ng-controller="UserCtrl as vm"> 
<h1 ng-bind="vm.title"></h1> 
<a href="" ng-click="vm.getUsers();">Get users</a> 
</div>
Angular: DOM creation/destruction 
<ul> 
<li ng-repeat="user in vm.users"></li> 
</ul>
Angular: JS Objects as DOM 
<input type="text" ng-model="vm.someModel"> 
<p>{{ vm.someModel }}</p> 
<!-- 
Maps across input value to Object 
$scope.vm.someModel 
-->
Angular: Expressions 
<p>{{ user.name }} | ({{ user.notifications.length }})</p> 
<!-- 
<p>Todd | (2)</p> 
-->
Angular: Automated events 
<li ng-repeat="user in vm.users"> 
<a href="" ng-click="vm.composeEmail()"> 
Compose email 
</a> 
</li>
Angular: Component lifecycles 
▸ Automatic event binding/unbinding 
▸ Creation/destruction of DOM and ($scope) Model data 
▸ ng-ifs, DOM stored in memory
Angular: Routing 
function Router ($routeProvider, $locationProvider) { 
$routeProvider.when('/inbox', { 
templateUrl: 'views/mailbox.html', 
controller: 'InboxCtrl as vm', 
resolve: InboxCtrl.resolve 
}).when('/email/:id', { 
templateUrl: 'views/email.html', 
controller: 'EmailCtrl as vm', 
resolve: EmailCtrl.resolve 
}).otherwise({ redirectTo: 'inbox' }); 
}; 
angular 
.module('app') 
.config(Router);
Angular: Modular JavaScript 
angular 
.module('app', [ 
'ngRoute', 
'Auth', 
'growl' 
]);
Angular: Form validation 
<form name="authForm" ng-submit="vm.submitForm();"> 
</form> 
<!-- 
authForm.$pristine 
authForm.$dirty 
authForm.$invalid 
authForm.$valid 
authForm.$error 
-->
Where next for Angular? 
2.0 DRIVE: BIT.LY/ZHQT1Q
Angular 2.0: Faster change detection 
ES6 Port of Angular.dart change detection 
github.com/angular/watchtower.js
Angular 2.0: Template engine 
github.com/angular/templating 
@ComponentDirective({ 
selector: 'tab-container', 
observe: { 
'tabs[]': 'tabsChanged' 
}, 
shadowDOM: true 
})
Angular 2.0: Data persistence 
▸ ngWebSocket ($ngWebSocket) 
▸ ngStore ($localStorage, $localDB) 
▸ ngOffline ($serviceWorker, $connection) 
▸ ngData (Models, IAdapter, ChangeEvent) 
▸ ngHttp (low-mid level APIs)
Angular 2.0: Annotations 
// reduces boilerplate and hides angular wireframe 
@Provide(Heater) 
export class MockHeater { 
constructor() {} 
on() { 
console.log('Turning on the MOCK heater...'); 
} 
off() {} 
}
Takeaways 
▸ Angular helps deliver the future now 
▸ Frameworks will always be ahead of the web 
▸ Libs/frameworks help sculpt the future 
▸ Where next? See you there!
Thank you 
@toddmotto 
speakerdeck.com/toddmotto

More Related Content

What's hot

Yes, browsers can do that! Hybrid and future web meetup at Jayway
Yes, browsers can do that! Hybrid and future web meetup at JaywayYes, browsers can do that! Hybrid and future web meetup at Jayway
Yes, browsers can do that! Hybrid and future web meetup at JaywayChristian Heilmann
 
RESS – Responsive Webdesign and Server Side Components
RESS – Responsive Webdesign and Server Side ComponentsRESS – Responsive Webdesign and Server Side Components
RESS – Responsive Webdesign and Server Side ComponentsSven Wolfermann
 
Survey of Front End Topics in Rails
Survey of Front End Topics in RailsSurvey of Front End Topics in Rails
Survey of Front End Topics in RailsBenjamin Vandgrift
 
jQuery Mobile: Progressive Enhancement with HTML5
jQuery Mobile: Progressive Enhancement with HTML5jQuery Mobile: Progressive Enhancement with HTML5
jQuery Mobile: Progressive Enhancement with HTML5Todd Anderson
 
The Art of AngularJS in 2015 - Angular Summit 2015
The Art of AngularJS in 2015 - Angular Summit 2015The Art of AngularJS in 2015 - Angular Summit 2015
The Art of AngularJS in 2015 - Angular Summit 2015Matt Raible
 
Илья Пухальский (EPAM Systems)
Илья Пухальский (EPAM Systems)Илья Пухальский (EPAM Systems)
Илья Пухальский (EPAM Systems)Ontico
 
CSS3 Takes on the World
CSS3 Takes on the WorldCSS3 Takes on the World
CSS3 Takes on the WorldJonathan Snook
 
Mozilla Brick - Frontend Rhein-Main June 2014
Mozilla Brick - Frontend Rhein-Main June 2014Mozilla Brick - Frontend Rhein-Main June 2014
Mozilla Brick - Frontend Rhein-Main June 2014Carsten Sandtner
 
Drush - use full power - DrupalCamp Donetsk 2014
Drush - use full power - DrupalCamp Donetsk 2014Drush - use full power - DrupalCamp Donetsk 2014
Drush - use full power - DrupalCamp Donetsk 2014Alex S
 
Desenvolvimento web com Ruby on Rails (parte 6)
Desenvolvimento web com Ruby on Rails (parte 6)Desenvolvimento web com Ruby on Rails (parte 6)
Desenvolvimento web com Ruby on Rails (parte 6)Joao Lucas Santana
 
Html5 on Mobile(For Developer)
Html5 on Mobile(For Developer)Html5 on Mobile(For Developer)
Html5 on Mobile(For Developer)Adam Lu
 
HTML5 and Mobile
HTML5 and MobileHTML5 and Mobile
HTML5 and Mobiledoodoofish
 
Chrome enchanted 2015
Chrome enchanted 2015Chrome enchanted 2015
Chrome enchanted 2015Chang W. Doh
 
Introduction to Vue.js
Introduction to Vue.jsIntroduction to Vue.js
Introduction to Vue.jsMeir Rotstein
 
ChocolateChip-UI
ChocolateChip-UIChocolateChip-UI
ChocolateChip-UIGeorgeIshak
 
Canvas
CanvasCanvas
CanvasRajon
 

What's hot (20)

JQuery UI
JQuery UIJQuery UI
JQuery UI
 
jQuery UI and Plugins
jQuery UI and PluginsjQuery UI and Plugins
jQuery UI and Plugins
 
Yes, browsers can do that! Hybrid and future web meetup at Jayway
Yes, browsers can do that! Hybrid and future web meetup at JaywayYes, browsers can do that! Hybrid and future web meetup at Jayway
Yes, browsers can do that! Hybrid and future web meetup at Jayway
 
RESS – Responsive Webdesign and Server Side Components
RESS – Responsive Webdesign and Server Side ComponentsRESS – Responsive Webdesign and Server Side Components
RESS – Responsive Webdesign and Server Side Components
 
Survey of Front End Topics in Rails
Survey of Front End Topics in RailsSurvey of Front End Topics in Rails
Survey of Front End Topics in Rails
 
jQuery Mobile: Progressive Enhancement with HTML5
jQuery Mobile: Progressive Enhancement with HTML5jQuery Mobile: Progressive Enhancement with HTML5
jQuery Mobile: Progressive Enhancement with HTML5
 
Rails3 asset-pipeline
Rails3 asset-pipelineRails3 asset-pipeline
Rails3 asset-pipeline
 
The Art of AngularJS in 2015 - Angular Summit 2015
The Art of AngularJS in 2015 - Angular Summit 2015The Art of AngularJS in 2015 - Angular Summit 2015
The Art of AngularJS in 2015 - Angular Summit 2015
 
Илья Пухальский (EPAM Systems)
Илья Пухальский (EPAM Systems)Илья Пухальский (EPAM Systems)
Илья Пухальский (EPAM Systems)
 
CSS3 Takes on the World
CSS3 Takes on the WorldCSS3 Takes on the World
CSS3 Takes on the World
 
Borrador del blog
Borrador del blogBorrador del blog
Borrador del blog
 
Mozilla Brick - Frontend Rhein-Main June 2014
Mozilla Brick - Frontend Rhein-Main June 2014Mozilla Brick - Frontend Rhein-Main June 2014
Mozilla Brick - Frontend Rhein-Main June 2014
 
Drush - use full power - DrupalCamp Donetsk 2014
Drush - use full power - DrupalCamp Donetsk 2014Drush - use full power - DrupalCamp Donetsk 2014
Drush - use full power - DrupalCamp Donetsk 2014
 
Desenvolvimento web com Ruby on Rails (parte 6)
Desenvolvimento web com Ruby on Rails (parte 6)Desenvolvimento web com Ruby on Rails (parte 6)
Desenvolvimento web com Ruby on Rails (parte 6)
 
Html5 on Mobile(For Developer)
Html5 on Mobile(For Developer)Html5 on Mobile(For Developer)
Html5 on Mobile(For Developer)
 
HTML5 and Mobile
HTML5 and MobileHTML5 and Mobile
HTML5 and Mobile
 
Chrome enchanted 2015
Chrome enchanted 2015Chrome enchanted 2015
Chrome enchanted 2015
 
Introduction to Vue.js
Introduction to Vue.jsIntroduction to Vue.js
Introduction to Vue.js
 
ChocolateChip-UI
ChocolateChip-UIChocolateChip-UI
ChocolateChip-UI
 
Canvas
CanvasCanvas
Canvas
 

Similar to AngularJS: The Bridge Between Today and Tomorrow's Web (Todd Motto)

Choosing a Javascript Framework
Choosing a Javascript FrameworkChoosing a Javascript Framework
Choosing a Javascript FrameworkAll Things Open
 
ESRI Dev Meetup: Building Distributed JavaScript Map Widgets
ESRI Dev Meetup: Building Distributed JavaScript Map WidgetsESRI Dev Meetup: Building Distributed JavaScript Map Widgets
ESRI Dev Meetup: Building Distributed JavaScript Map WidgetsAllan Glen
 
Angular directive filter and routing
Angular directive filter and routingAngular directive filter and routing
Angular directive filter and routingjagriti srivastava
 
Five Pound App talk: hereit.is, Web app architecture, REST, CSS3
Five Pound App talk: hereit.is, Web app architecture, REST, CSS3Five Pound App talk: hereit.is, Web app architecture, REST, CSS3
Five Pound App talk: hereit.is, Web app architecture, REST, CSS3Jamie Matthews
 
The Future of CSS with Web components
The Future of CSS with Web componentsThe Future of CSS with Web components
The Future of CSS with Web componentsdevObjective
 
The Future of CSS with Web Components
The Future of CSS with Web ComponentsThe Future of CSS with Web Components
The Future of CSS with Web ComponentsColdFusionConference
 
Webgl para JavaScripters
Webgl para JavaScriptersWebgl para JavaScripters
Webgl para JavaScriptersgerbille
 
Building iPhone Web Apps using "classic" Domino
Building iPhone Web Apps using "classic" DominoBuilding iPhone Web Apps using "classic" Domino
Building iPhone Web Apps using "classic" DominoRob Bontekoe
 
Architecture, Auth, and Routing with uiRouter
Architecture, Auth, and Routing with uiRouterArchitecture, Auth, and Routing with uiRouter
Architecture, Auth, and Routing with uiRouterChristopher Caplinger
 
SVCC 2013 D3.js Presentation (10/05/2013)
SVCC 2013 D3.js Presentation (10/05/2013)SVCC 2013 D3.js Presentation (10/05/2013)
SVCC 2013 D3.js Presentation (10/05/2013)Oswald Campesato
 
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
 
Big Data for each one of us
Big Data for each one of usBig Data for each one of us
Big Data for each one of usOSCON Byrum
 
Everything is Awesome - Cutting the Corners off the Web
Everything is Awesome - Cutting the Corners off the WebEverything is Awesome - Cutting the Corners off the Web
Everything is Awesome - Cutting the Corners off the WebJames Rakich
 
Design & Performance - Steve Souders at Fastly Altitude 2015
Design & Performance - Steve Souders at Fastly Altitude 2015Design & Performance - Steve Souders at Fastly Altitude 2015
Design & Performance - Steve Souders at Fastly Altitude 2015Fastly
 

Similar to AngularJS: The Bridge Between Today and Tomorrow's Web (Todd Motto) (20)

Choosing a Javascript Framework
Choosing a Javascript FrameworkChoosing a Javascript Framework
Choosing a Javascript Framework
 
Test upload
Test uploadTest upload
Test upload
 
ESRI Dev Meetup: Building Distributed JavaScript Map Widgets
ESRI Dev Meetup: Building Distributed JavaScript Map WidgetsESRI Dev Meetup: Building Distributed JavaScript Map Widgets
ESRI Dev Meetup: Building Distributed JavaScript Map Widgets
 
Angular directive filter and routing
Angular directive filter and routingAngular directive filter and routing
Angular directive filter and routing
 
Five Pound App talk: hereit.is, Web app architecture, REST, CSS3
Five Pound App talk: hereit.is, Web app architecture, REST, CSS3Five Pound App talk: hereit.is, Web app architecture, REST, CSS3
Five Pound App talk: hereit.is, Web app architecture, REST, CSS3
 
HTML5 Essentials
HTML5 EssentialsHTML5 Essentials
HTML5 Essentials
 
Introduction to angular js
Introduction to angular jsIntroduction to angular js
Introduction to angular js
 
The Future of CSS with Web components
The Future of CSS with Web componentsThe Future of CSS with Web components
The Future of CSS with Web components
 
The Future of CSS with Web Components
The Future of CSS with Web ComponentsThe Future of CSS with Web Components
The Future of CSS with Web Components
 
Webgl para JavaScripters
Webgl para JavaScriptersWebgl para JavaScripters
Webgl para JavaScripters
 
Building iPhone Web Apps using "classic" Domino
Building iPhone Web Apps using "classic" DominoBuilding iPhone Web Apps using "classic" Domino
Building iPhone Web Apps using "classic" Domino
 
Architecture, Auth, and Routing with uiRouter
Architecture, Auth, and Routing with uiRouterArchitecture, Auth, and Routing with uiRouter
Architecture, Auth, and Routing with uiRouter
 
Svcc 2013-d3
Svcc 2013-d3Svcc 2013-d3
Svcc 2013-d3
 
SVCC 2013 D3.js Presentation (10/05/2013)
SVCC 2013 D3.js Presentation (10/05/2013)SVCC 2013 D3.js Presentation (10/05/2013)
SVCC 2013 D3.js Presentation (10/05/2013)
 
Google Maps API 101
Google Maps API 101Google Maps API 101
Google Maps API 101
 
Angular server side rendering - Strategies & Technics
Angular server side rendering - Strategies & Technics Angular server side rendering - Strategies & Technics
Angular server side rendering - Strategies & Technics
 
Web Components
Web ComponentsWeb Components
Web Components
 
Big Data for each one of us
Big Data for each one of usBig Data for each one of us
Big Data for each one of us
 
Everything is Awesome - Cutting the Corners off the Web
Everything is Awesome - Cutting the Corners off the WebEverything is Awesome - Cutting the Corners off the Web
Everything is Awesome - Cutting the Corners off the Web
 
Design & Performance - Steve Souders at Fastly Altitude 2015
Design & Performance - Steve Souders at Fastly Altitude 2015Design & Performance - Steve Souders at Fastly Altitude 2015
Design & Performance - Steve Souders at Fastly Altitude 2015
 

More from Future Insights

The Human Body in the IoT. Tim Cannon + Ryan O'Shea
The Human Body in the IoT. Tim Cannon + Ryan O'SheaThe Human Body in the IoT. Tim Cannon + Ryan O'Shea
The Human Body in the IoT. Tim Cannon + Ryan O'SheaFuture Insights
 
Pretty pictures - Brandon Satrom
Pretty pictures - Brandon SatromPretty pictures - Brandon Satrom
Pretty pictures - Brandon SatromFuture Insights
 
Putting real time into practice - Saul Diez-Guerra
Putting real time into practice - Saul Diez-GuerraPutting real time into practice - Saul Diez-Guerra
Putting real time into practice - Saul Diez-GuerraFuture Insights
 
Surviving the enterprise storm - @RianVDM
Surviving the enterprise storm - @RianVDMSurviving the enterprise storm - @RianVDM
Surviving the enterprise storm - @RianVDMFuture Insights
 
Exploring Open Date with BigQuery: Jenny Tong
Exploring Open Date with BigQuery: Jenny TongExploring Open Date with BigQuery: Jenny Tong
Exploring Open Date with BigQuery: Jenny TongFuture Insights
 
A Universal Theory of Everything, Christopher Murphy
A Universal Theory of Everything, Christopher MurphyA Universal Theory of Everything, Christopher Murphy
A Universal Theory of Everything, Christopher MurphyFuture Insights
 
Horizon Interactive Awards, Mike Sauce & Jeff Jahn
Horizon Interactive Awards, Mike Sauce & Jeff JahnHorizon Interactive Awards, Mike Sauce & Jeff Jahn
Horizon Interactive Awards, Mike Sauce & Jeff JahnFuture Insights
 
Reading Your Users’ Minds: Empiricism, Design, and Human Behavior, Shane F. B...
Reading Your Users’ Minds: Empiricism, Design, and Human Behavior, Shane F. B...Reading Your Users’ Minds: Empiricism, Design, and Human Behavior, Shane F. B...
Reading Your Users’ Minds: Empiricism, Design, and Human Behavior, Shane F. B...Future Insights
 
Front End Development Transformation at Scale, Damon Deaner
Front End Development Transformation at Scale, Damon DeanerFront End Development Transformation at Scale, Damon Deaner
Front End Development Transformation at Scale, Damon DeanerFuture Insights
 
Structuring Data from Unstructured Things. Sean Lorenz
Structuring Data from Unstructured Things. Sean LorenzStructuring Data from Unstructured Things. Sean Lorenz
Structuring Data from Unstructured Things. Sean LorenzFuture Insights
 
Cinematic UX, Brad Weaver
Cinematic UX, Brad WeaverCinematic UX, Brad Weaver
Cinematic UX, Brad WeaverFuture Insights
 
The Future is Modular, Jonathan Snook
The Future is Modular, Jonathan SnookThe Future is Modular, Jonathan Snook
The Future is Modular, Jonathan SnookFuture Insights
 
Designing an Enterprise CSS Framework is Hard, Stephanie Rewis
Designing an Enterprise CSS Framework is Hard, Stephanie RewisDesigning an Enterprise CSS Framework is Hard, Stephanie Rewis
Designing an Enterprise CSS Framework is Hard, Stephanie RewisFuture Insights
 
Accessibility Is More Than What Lies In The Code, Jennison Asuncion
Accessibility Is More Than What Lies In The Code, Jennison AsuncionAccessibility Is More Than What Lies In The Code, Jennison Asuncion
Accessibility Is More Than What Lies In The Code, Jennison AsuncionFuture Insights
 
Sunny with a Chance of Innovation: A How-To for Product Managers and Designer...
Sunny with a Chance of Innovation: A How-To for Product Managers and Designer...Sunny with a Chance of Innovation: A How-To for Product Managers and Designer...
Sunny with a Chance of Innovation: A How-To for Product Managers and Designer...Future Insights
 
Designing for Dyslexia, Andrew Zusman
Designing for Dyslexia, Andrew ZusmanDesigning for Dyslexia, Andrew Zusman
Designing for Dyslexia, Andrew ZusmanFuture Insights
 
Beyond Measure, Erika Hall
Beyond Measure, Erika HallBeyond Measure, Erika Hall
Beyond Measure, Erika HallFuture Insights
 
Real Artists Ship, Haraldur Thorleifsson
Real Artists Ship, Haraldur ThorleifssonReal Artists Ship, Haraldur Thorleifsson
Real Artists Ship, Haraldur ThorleifssonFuture Insights
 
Ok Computer. Peter Gasston
Ok Computer. Peter GasstonOk Computer. Peter Gasston
Ok Computer. Peter GasstonFuture Insights
 
Digital Manuscripts Toolkit, using IIIF and JavaScript. Monica Messaggi Kaya
Digital Manuscripts Toolkit, using IIIF and JavaScript. Monica Messaggi KayaDigital Manuscripts Toolkit, using IIIF and JavaScript. Monica Messaggi Kaya
Digital Manuscripts Toolkit, using IIIF and JavaScript. Monica Messaggi KayaFuture Insights
 

More from Future Insights (20)

The Human Body in the IoT. Tim Cannon + Ryan O'Shea
The Human Body in the IoT. Tim Cannon + Ryan O'SheaThe Human Body in the IoT. Tim Cannon + Ryan O'Shea
The Human Body in the IoT. Tim Cannon + Ryan O'Shea
 
Pretty pictures - Brandon Satrom
Pretty pictures - Brandon SatromPretty pictures - Brandon Satrom
Pretty pictures - Brandon Satrom
 
Putting real time into practice - Saul Diez-Guerra
Putting real time into practice - Saul Diez-GuerraPutting real time into practice - Saul Diez-Guerra
Putting real time into practice - Saul Diez-Guerra
 
Surviving the enterprise storm - @RianVDM
Surviving the enterprise storm - @RianVDMSurviving the enterprise storm - @RianVDM
Surviving the enterprise storm - @RianVDM
 
Exploring Open Date with BigQuery: Jenny Tong
Exploring Open Date with BigQuery: Jenny TongExploring Open Date with BigQuery: Jenny Tong
Exploring Open Date with BigQuery: Jenny Tong
 
A Universal Theory of Everything, Christopher Murphy
A Universal Theory of Everything, Christopher MurphyA Universal Theory of Everything, Christopher Murphy
A Universal Theory of Everything, Christopher Murphy
 
Horizon Interactive Awards, Mike Sauce & Jeff Jahn
Horizon Interactive Awards, Mike Sauce & Jeff JahnHorizon Interactive Awards, Mike Sauce & Jeff Jahn
Horizon Interactive Awards, Mike Sauce & Jeff Jahn
 
Reading Your Users’ Minds: Empiricism, Design, and Human Behavior, Shane F. B...
Reading Your Users’ Minds: Empiricism, Design, and Human Behavior, Shane F. B...Reading Your Users’ Minds: Empiricism, Design, and Human Behavior, Shane F. B...
Reading Your Users’ Minds: Empiricism, Design, and Human Behavior, Shane F. B...
 
Front End Development Transformation at Scale, Damon Deaner
Front End Development Transformation at Scale, Damon DeanerFront End Development Transformation at Scale, Damon Deaner
Front End Development Transformation at Scale, Damon Deaner
 
Structuring Data from Unstructured Things. Sean Lorenz
Structuring Data from Unstructured Things. Sean LorenzStructuring Data from Unstructured Things. Sean Lorenz
Structuring Data from Unstructured Things. Sean Lorenz
 
Cinematic UX, Brad Weaver
Cinematic UX, Brad WeaverCinematic UX, Brad Weaver
Cinematic UX, Brad Weaver
 
The Future is Modular, Jonathan Snook
The Future is Modular, Jonathan SnookThe Future is Modular, Jonathan Snook
The Future is Modular, Jonathan Snook
 
Designing an Enterprise CSS Framework is Hard, Stephanie Rewis
Designing an Enterprise CSS Framework is Hard, Stephanie RewisDesigning an Enterprise CSS Framework is Hard, Stephanie Rewis
Designing an Enterprise CSS Framework is Hard, Stephanie Rewis
 
Accessibility Is More Than What Lies In The Code, Jennison Asuncion
Accessibility Is More Than What Lies In The Code, Jennison AsuncionAccessibility Is More Than What Lies In The Code, Jennison Asuncion
Accessibility Is More Than What Lies In The Code, Jennison Asuncion
 
Sunny with a Chance of Innovation: A How-To for Product Managers and Designer...
Sunny with a Chance of Innovation: A How-To for Product Managers and Designer...Sunny with a Chance of Innovation: A How-To for Product Managers and Designer...
Sunny with a Chance of Innovation: A How-To for Product Managers and Designer...
 
Designing for Dyslexia, Andrew Zusman
Designing for Dyslexia, Andrew ZusmanDesigning for Dyslexia, Andrew Zusman
Designing for Dyslexia, Andrew Zusman
 
Beyond Measure, Erika Hall
Beyond Measure, Erika HallBeyond Measure, Erika Hall
Beyond Measure, Erika Hall
 
Real Artists Ship, Haraldur Thorleifsson
Real Artists Ship, Haraldur ThorleifssonReal Artists Ship, Haraldur Thorleifsson
Real Artists Ship, Haraldur Thorleifsson
 
Ok Computer. Peter Gasston
Ok Computer. Peter GasstonOk Computer. Peter Gasston
Ok Computer. Peter Gasston
 
Digital Manuscripts Toolkit, using IIIF and JavaScript. Monica Messaggi Kaya
Digital Manuscripts Toolkit, using IIIF and JavaScript. Monica Messaggi KayaDigital Manuscripts Toolkit, using IIIF and JavaScript. Monica Messaggi Kaya
Digital Manuscripts Toolkit, using IIIF and JavaScript. Monica Messaggi Kaya
 

Recently uploaded

Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in MinutesSpeed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutesconfluent
 
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxAbida Shariff
 
IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024IoTAnalytics
 
Demystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyDemystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyJohn Staveley
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...Product School
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesBhaskar Mitra
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
 
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀DianaGray10
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Product School
 
UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1DianaGray10
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonDianaGray10
 
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...CzechDreamin
 
Custom Approval Process: A New Perspective, Pavel Hrbacek & Anindya Halder
Custom Approval Process: A New Perspective, Pavel Hrbacek & Anindya HalderCustom Approval Process: A New Perspective, Pavel Hrbacek & Anindya Halder
Custom Approval Process: A New Perspective, Pavel Hrbacek & Anindya HalderCzechDreamin
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Product School
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...Product School
 
In-Depth Performance Testing Guide for IT Professionals
In-Depth Performance Testing Guide for IT ProfessionalsIn-Depth Performance Testing Guide for IT Professionals
In-Depth Performance Testing Guide for IT ProfessionalsExpeed Software
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...Sri Ambati
 
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone KomSalesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone KomCzechDreamin
 
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)Julian Hyde
 

Recently uploaded (20)

Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in MinutesSpeed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutes
 
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
 
IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024
 
Demystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyDemystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John Staveley
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
 
Custom Approval Process: A New Perspective, Pavel Hrbacek & Anindya Halder
Custom Approval Process: A New Perspective, Pavel Hrbacek & Anindya HalderCustom Approval Process: A New Perspective, Pavel Hrbacek & Anindya Halder
Custom Approval Process: A New Perspective, Pavel Hrbacek & Anindya Halder
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 
In-Depth Performance Testing Guide for IT Professionals
In-Depth Performance Testing Guide for IT ProfessionalsIn-Depth Performance Testing Guide for IT Professionals
In-Depth Performance Testing Guide for IT Professionals
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone KomSalesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
 
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
 

AngularJS: The Bridge Between Today and Tomorrow's Web (Todd Motto)

  • 1. AngularJS THE BRIDGE BETWEEN TODAY AND tomorrow's WEB
  • 3. A look at the web ▸ Yesterday, where we came from ▸ Tomorrow, where we’re headed ▸ Today, what’s available ▸ Angular, today ▸ Angular, tomorrow
  • 5. <TABLE WIDTH="100%" CELLPADDING="0" CELLSPACING="0" BORDER="0"> <TR> <TD COLSPAN="3">Oh my!</TD> </TR> </TABLE>
  • 7. <center> <font size="4">Awesome letters</font> </center>
  • 9. <img src="planets.gif" width="145" height="126" alt="Planets" usemap="#planetmap"> <map name="planetmap"> <area shape="rect" coords="0,0,82,126" href="sun.htm" alt="Sun"> <area shape="circle" coords="90,58,3" href="mercur.htm" alt="Mercury"> <area shape="circle" coords="124,58,8" href="venus.htm" alt="Venus"> </map>
  • 10.
  • 11.
  • 12. Where are we now?
  • 13.
  • 14. ▸ <video>, <audio> ▸ WebGL,<canvas> ▸ getUserMedia ▸ Geolocation (kinda) ▸ Fullscreen API ▸ WebSockets
  • 15. ▸ local and session storage ▸ History API ▸ Indexed DB ▸ Web SQL (kinda) ▸ Native form validation (required, email etc) ▸ FormData
  • 16. ▸ Dataset (custom data-*) ▸ HTML5 semantics ▸ File/FileReader API ▸ classList API ▸ Drag and drop ▸ postMessage ▸ contenteditable
  • 17. And breathe. HTML5 is huge.
  • 18. To make things even more difficult for us...
  • 19. Frameworks and Model- View-Whatever
  • 20. ▸ Angular ▸ Backbone ▸ Ember ▸ Knockout ▸ React
  • 22. We're still missing stuff! ▸ Templates/Encapsulation/Components ▸ Two-way data binding/Model data ▸ Promises and Class-like components ▸ Modules ▸ Dependency Injection (DI)
  • 23. So where are we going?
  • 24. Incoming... ▸ Web Components (HTML5) ▸ Object.observe (ES7) ▸ Native Promises (ES6) ▸ Modules (ES6) ▸ Classes (ES6)
  • 26. Web Components: Custom Elements <google-map latitude="37.77493" longitude="-122.41942"> <google-map-marker latitude="37.779" longitude="-122.3892" title="Go Giants!"></google-map-marker> </google-map>
  • 28. Web Components: Templates <template id="google-map"> <style> :host { position: relative; } #map { position: absolute; top: 0; right: 0; bottom: 0; left: 0; } </style> <div class="map"> <div id="map"></div> </div> </template>
  • 30. Web Components: Shadow DOM ▾<google-map latitude="37.77493" longitude="-122.41942"> ▾#shadow-root (user-agent) <div class="map"> <div id="map"> <canvas class="map"></canvas> </div> </div> </google-map>
  • 32. Web Components: HTML Imports <link rel="import" href="../components/google-map.html">
  • 34. ES7: Object.observe() // html5rocks.com/en/tutorials/es7/observe // Let's say we have a model with data var model = {}; // Which we then observe Object.observe(model, function(changes){ // This asynchronous callback runs changes.forEach(function(change) { // Letting us know what changed console.log(change.type, change.name, change.oldValue); }); });
  • 36. ES6: Promises // html5rocks.com/en/tutorials/es6/promises var promise = new Promise(function(resolve, reject) { if (/* everything turned out fine */) { resolve('Stuff worked!'); } else { reject(Error('It broke')); } }); promise.then(function (result) { console.log(result); // "Stuff worked!" }, function(err) { console.log(err); // Error: "It broke" });
  • 38. ES6: Modules // 2ality.com/2014/09/es6-modules-final.html //------ lib.js ------ export const sqrt = Math.sqrt; export function square(x) { return x * x; } export function diag(x, y) { return sqrt(square(x) + square(y)); } //------ main.js ------ import { square, diag } from 'lib'; console.log(square(11)); // 121 console.log(diag(4, 3)); // 5
  • 40. ES6: Classes // javascriptplayground.com/blog/2014/07/introduction-to-es6-classes-tutorial class Model { constructor (properties) { this.properties = properties; } toObject() { return this.properties; } }
  • 43. Angular: Custom Elements <google-map latitude="37.77493" longitude="-122.41942"> <google-map-marker latitude="37.779" longitude="-122.3892" title="Go Giants!"></google-map-marker> </google-map>
  • 45. Angular: Templates function googleMap () { return { scope: { longitude: '=', latitude: '=' }, template: [ '<div class="map">', '<div id="map"></div>', '</div>', ].join('') }; } angular .module('app') .directive('googleMap', googleMap);
  • 47. Angular: "Shadow DOM" <google-map latitude="37.77493" longitude="-122.41942"> <div class="map"> <div id="map"> <canvas class="map"></canvas> </div> </div> </google-map>
  • 49. Angular: HTML Imports function googleMap () { return { scope: { longitude: '=', latitude: '=' }, templateUrl: '../google-map.html' }; } angular .module('app') .directive('googleMap', googleMap);
  • 51. Angular: $scope.$watch function MainCtrl ($scope) { $scope.$watch('model', function (newVal, oldVal) { // }); } angular .module('app') .directive('MainCtrl', MainCtrl);
  • 53. Angular: Promises $http .get('/someurl') .then(function (response) { // :) }, function (reason) { // :( });
  • 54. Above and beyond specs BUILDING ON TOP OF THE WEB PLATFORM
  • 55. Angular: Dependency Injection function MainCtrl ($scope, $rootScope) { } angular .module('app') .controller('MainCtrl', MainCtrl);
  • 56. Angular: Declarative bindings <!-- ng-* --> <div ng-controller="UserCtrl as vm"> <h1 ng-bind="vm.title"></h1> <a href="" ng-click="vm.getUsers();">Get users</a> </div>
  • 57. Angular: DOM creation/destruction <ul> <li ng-repeat="user in vm.users"></li> </ul>
  • 58. Angular: JS Objects as DOM <input type="text" ng-model="vm.someModel"> <p>{{ vm.someModel }}</p> <!-- Maps across input value to Object $scope.vm.someModel -->
  • 59. Angular: Expressions <p>{{ user.name }} | ({{ user.notifications.length }})</p> <!-- <p>Todd | (2)</p> -->
  • 60. Angular: Automated events <li ng-repeat="user in vm.users"> <a href="" ng-click="vm.composeEmail()"> Compose email </a> </li>
  • 61. Angular: Component lifecycles ▸ Automatic event binding/unbinding ▸ Creation/destruction of DOM and ($scope) Model data ▸ ng-ifs, DOM stored in memory
  • 62. Angular: Routing function Router ($routeProvider, $locationProvider) { $routeProvider.when('/inbox', { templateUrl: 'views/mailbox.html', controller: 'InboxCtrl as vm', resolve: InboxCtrl.resolve }).when('/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl as vm', resolve: EmailCtrl.resolve }).otherwise({ redirectTo: 'inbox' }); }; angular .module('app') .config(Router);
  • 63. Angular: Modular JavaScript angular .module('app', [ 'ngRoute', 'Auth', 'growl' ]);
  • 64. Angular: Form validation <form name="authForm" ng-submit="vm.submitForm();"> </form> <!-- authForm.$pristine authForm.$dirty authForm.$invalid authForm.$valid authForm.$error -->
  • 65. Where next for Angular? 2.0 DRIVE: BIT.LY/ZHQT1Q
  • 66. Angular 2.0: Faster change detection ES6 Port of Angular.dart change detection github.com/angular/watchtower.js
  • 67. Angular 2.0: Template engine github.com/angular/templating @ComponentDirective({ selector: 'tab-container', observe: { 'tabs[]': 'tabsChanged' }, shadowDOM: true })
  • 68. Angular 2.0: Data persistence ▸ ngWebSocket ($ngWebSocket) ▸ ngStore ($localStorage, $localDB) ▸ ngOffline ($serviceWorker, $connection) ▸ ngData (Models, IAdapter, ChangeEvent) ▸ ngHttp (low-mid level APIs)
  • 69. Angular 2.0: Annotations // reduces boilerplate and hides angular wireframe @Provide(Heater) export class MockHeater { constructor() {} on() { console.log('Turning on the MOCK heater...'); } off() {} }
  • 70. Takeaways ▸ Angular helps deliver the future now ▸ Frameworks will always be ahead of the web ▸ Libs/frameworks help sculpt the future ▸ Where next? See you there!
  • 71. Thank you @toddmotto speakerdeck.com/toddmotto