SlideShare uma empresa Scribd logo
1 de 160
Baixar para ler offline
Ember.js and AngularJS
Two Architectures Compared

Evan Dorn
and Hannah Howard
Logical Reality Design
http://lrdesign.com
evan@lrdesign.com
@idahoev
hannah@techgirlwonder.com
@techgirlwonder

Tuesday, November 19, 13
How do I web application?

Tuesday, November 19, 13
Simple apps can use
simple tools.

Tuesday, November 19, 13
BIG APPS NEED

ARCHITECTURE

Tuesday, November 19, 13
BIG APPS NEED

ARCHITECTURE
•Keep

Tuesday, November 19, 13

it organized!
BIG APPS NEED

ARCHITECTURE
•Keep

it organized!

•Modularize

Tuesday, November 19, 13

your code!
BIG APPS NEED

ARCHITECTURE
•Keep

it organized!

•Modularize
•Separate

Tuesday, November 19, 13

your code!

concerns!
BIG APPS NEED

ARCHITECTURE
•Keep

it organized!

•Modularize

your code!

•Separate

concerns!

•Establish

conventions for smooth teamwork!

Tuesday, November 19, 13
BIG APPS NEED

ARCHITECTURE
•Keep

it organized!

•Modularize

your code!

•Separate

concerns!

•Establish

conventions for smooth teamwork!

•Keep

Tuesday, November 19, 13

it testable!
Most tools use
some variant of

MVC
“Model, View, Controller"
Tuesday, November 19, 13
WARNING!

Tuesday, November 19, 13
“MVC” is used in
many different ways!

Tuesday, November 19, 13
MVC (ROUGHLY)
View
(UI)

Model
(data)
Controller
(interface)

Tuesday, November 19, 13
BUT SOMETIMES...
View

Model

Controller

Tuesday, November 19, 13
OTHER TIMES...
View

Presenter

Controller

Tuesday, November 19, 13

Model
OR EVEN...
View

Presenter

Controller

Tuesday, November 19, 13

Model
The Web App
Challenge

Tuesday, November 19, 13
CLASSIC RAILS APP
Browser

Server
Markup

DOM
UX
“The Page”

Model

HTTP
Request

Tuesday, November 19, 13

View

Controller
THE PROBLEMS:

Tuesday, November 19, 13
THE PROBLEMS:
•All

possible user actions must be precomputed

Tuesday, November 19, 13
THE PROBLEMS:
•All
•...

possible user actions must be precomputed

and embedded into the HTML

Tuesday, November 19, 13
THE PROBLEMS:
•All
•...

possible user actions must be precomputed

and embedded into the HTML

•Reloading

Tuesday, November 19, 13

the whole page every request
THE PROBLEMS:
•All
•...

possible user actions must be precomputed

and embedded into the HTML

•Reloading
•Some

the whole page every request

actions not possible without browser
interactivity

Tuesday, November 19, 13
HOW DO WE
ARCHITECT
A BROWSER APP?

Tuesday, November 19, 13
JS SINGLE-PAGE APP
Browser
App for user interaction
View

Model
Controller

Tuesday, November 19, 13

Server
Mostly persistence

Controller

Model
JS SINGLE-PAGE APP
Browser
App for user interaction
View

Model
Controller

Tuesday, November 19, 13

Server
Persistence Only!

Model
FOR MORE INFO

Tuesday, November 19, 13
FOR MORE INFO
Google Yehuda Katz’ Excellent Presentation:

Tuesday, November 19, 13
FOR MORE INFO
Google Yehuda Katz’ Excellent Presentation:

“A Tale of Two MVC’s”

Tuesday, November 19, 13
FOR MORE INFO
Google Yehuda Katz’ Excellent Presentation:

“A Tale of Two MVC’s”
From GoGaRuCo 2013

Tuesday, November 19, 13
FOR MORE INFO
Google Yehuda Katz’ Excellent Presentation:

“A Tale of Two MVC’s”
From GoGaRuCo 2013

Tuesday, November 19, 13
EMBER.JS &
ANGULARJS
BOTH USE “MVC”
THINKING

Tuesday, November 19, 13
BUT WITH DIFFERENT
PHILOSOPHIES...

Tuesday, November 19, 13
BUT WITH DIFFERENT
PHILOSOPHIES...
..LEADING TO DIFFERENT

ARCHITECTURES
Tuesday, November 19, 13
BROWSER APP?

Tuesday, November 19, 13
BROWSER APP?
Ember.js Sees:

Tuesday, November 19, 13
BROWSER APP?
Ember.js Sees:
Browser

Tuesday, November 19, 13

APP
BROWSER APP?
Ember.js Sees:
Browser

Tuesday, November 19, 13

APP

AngularJS Sees:
BROWSER APP?
Ember.js Sees:
Browser

Tuesday, November 19, 13

APP

AngularJS Sees:

Browser

App
PHILOSOPHY: EMBER

Tuesday, November 19, 13
PHILOSOPHY: EMBER
•Take

Tuesday, November 19, 13

known techniques for building apps
PHILOSOPHY: EMBER
•Take
•...

known techniques for building apps

concepts from Rails

Tuesday, November 19, 13
PHILOSOPHY: EMBER
•Take

known techniques for building apps

•...

concepts from Rails

•...

concepts from Cocoa

Tuesday, November 19, 13
PHILOSOPHY: EMBER
•Take

known techniques for building apps

•...

concepts from Rails

•...

concepts from Cocoa

•Apply

Tuesday, November 19, 13

them to the browser
PHILOSOPHY: ANGULAR

Tuesday, November 19, 13
PHILOSOPHY: ANGULAR
•Start

Tuesday, November 19, 13

from the browser - HTML and CSS
PHILOSOPHY: ANGULAR
•Start

from the browser - HTML and CSS

•Extend

Tuesday, November 19, 13

those concepts to app creation
PHILOSOPHY: ANGULAR
•Start

from the browser - HTML and CSS

•Extend

those concepts to app creation

•Angular

asks... What would markup look
like, if it were designed for building apps
instead of just pages?

Tuesday, November 19, 13
SHARED ASPECTS:

Tuesday, November 19, 13
SHARED ASPECTS:
•Single

Tuesday, November 19, 13

point of truth - the Model
SHARED ASPECTS:
•Single
•MVC

Tuesday, November 19, 13

point of truth - the Model

thinking
SHARED ASPECTS:
•Single
•MVC

thinking

•Routes

Tuesday, November 19, 13

point of truth - the Model

connect user actions to controllers
EMBER PRIORITIES

Tuesday, November 19, 13
EMBER PRIORITIES
•Unified

Tuesday, November 19, 13

interface to data
EMBER PRIORITIES
•Unified

interface to data

•Convention

Tuesday, November 19, 13

of structure
EMBER PRIORITIES
•Unified

interface to data

•Convention
•Sharing

Tuesday, November 19, 13

of structure

Of URLs
EMBER PRIORITIES
•Unified

interface to data

•Convention
•Sharing
•UI

Of URLs

Design

Tuesday, November 19, 13

of structure
ANGULAR PRIORITIES

Tuesday, November 19, 13
ANGULAR PRIORITIES
•Web-UX

Tuesday, November 19, 13

driven thinking
ANGULAR PRIORITIES
•Web-UX

driven thinking

•Isolatable

Tuesday, November 19, 13

/ testable code
ANGULAR PRIORITIES
•Web-UX

driven thinking

•Isolatable
•Add

Tuesday, November 19, 13

/ testable code

app features by augmenting the DOM
SYN-NAPS #1

Tuesday, November 19, 13
SYN-NAPS #1
•Attentional

Tuesday, November 19, 13

focus is best < 15 minutes
SYN-NAPS #1
•Attentional
•Best

focus is best < 15 minutes

to take breaks to let the synapses
recover

Tuesday, November 19, 13
SYN-NAPS #1
•Attentional

focus is best < 15 minutes

•Best

to take breaks to let the synapses
recover

•So

let’s do a little exercise to review

Tuesday, November 19, 13
DIFFERENT JOBS
NEED DIFFERENT

ARCHITECTURES
Tuesday, November 19, 13
GRAB A NEIGHBOR
NEXT TO YOU

Tuesday, November 19, 13
DISCUSS WITH THEM:

Tuesday, November 19, 13
DISCUSS WITH THEM:
1. An app that’s too small to need MVC

Tuesday, November 19, 13
DISCUSS WITH THEM:
1. An app that’s too small to need MVC
2. A small app that grew till it needed MVC

Tuesday, November 19, 13
DISCUSS WITH THEM:
1. An app that’s too small to need MVC
2. A small app that grew till it needed MVC
3. Any platform is fine!

Tuesday, November 19, 13
SYN-NAPS #1

Tuesday, November 19, 13
SYN-NAPS #1
3 minutes...
Tuesday, November 19, 13
SYN-NAPS #1
3 minutes... GO!
Tuesday, November 19, 13
SYN-NAPS #1

Tuesday, November 19, 13
SYN-NAPS #1
3 minutes...
Tuesday, November 19, 13
SYN-NAPS #1
3 minutes...
STOP!
Tuesday, November 19, 13
EMBER ARCHITECTURE
1:START

Tuesday, November 19, 13
EMBER ARCHITECTURE
1:START
Ember starts with
the URL/Route

Tuesday, November 19, 13
EMBER ARCHITECTURE
1:START
Ember starts with
the URL/Route
Loads Model

Tuesday, November 19, 13
EMBER ARCHITECTURE
1:START
Ember starts with
the URL/Route
Loads Model
Renders
Template

Tuesday, November 19, 13
EMBER ARCHITECTURE
1:START
Ember starts with
the URL/Route
Loads Model
Renders
Template
Adds Template
To DOM

Tuesday, November 19, 13
EMBER ARCHITECTURE
2: RUNTIME

Tuesday, November 19, 13
EMBER ARCHITECTURE
2: RUNTIME
Ember Watches for
Events

Tuesday, November 19, 13
EMBER ARCHITECTURE
2: RUNTIME
Ember Watches for
Events
Passes Events To
Controller (or bubbles
up to Route) to update
model

Tuesday, November 19, 13
EMBER ARCHITECTURE
2: RUNTIME
Ember Watches for
Events
Passes Events To
Controller (or bubbles
up to Route) to update
model
DOM auto-updates

Tuesday, November 19, 13
EMBER ARCHITECTURE
3: ROUTER

Tuesday, November 19, 13
EMBER ARCHITECTURE
3: ROUTER
•The

entry point for everything in Ember is
the router

Tuesday, November 19, 13
EMBER ARCHITECTURE
3: ROUTER
•The

entry point for everything in Ember is
the router

•Looks

Tuesday, November 19, 13

a lot like a routes.rb in Rails
EMBER ARCHITECTURE
3: ROUTER
•The

entry point for everything in Ember is
the router

•Looks

a lot like a routes.rb in Rails

•Different:

Controller
Tuesday, November 19, 13

Fetches the Model for the
EMBER ARCHITECTURE 4: ROUTER
App.Router.map(function() {
// put your routes here
});
App.IndexRoute = Ember.Route.extend({
model: function() {
return ['red', 'yellow', 'blue'];
}
});
<script type="text/x-handlebars">
<h2>Welcome to Ember.js</h2>
{{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="index">
<ul>
{{#each item in model}}
<li>{{item}}</li>
{{/each}}
</ul>

</script>
Tuesday, November 19, 13
EMBER ARCHITECTURE 4: TEMPLATE
App.Router.map(function() {
// put your routes here
});
App.IndexRoute = Ember.Route.extend({
model: function() {
return ['red', 'yellow', 'blue'];
}
});
<script type="text/x-handlebars">
<h2>Welcome to Ember.js</h2>
{{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="index">
<ul>
{{#each item in model}}
<li>{{item}}</li>
{{/each}}
</ul>

</script>
Tuesday, November 19, 13
EMBER ARCHITECTURE 5:
CONTROLLERS

Tuesday, November 19, 13
EMBER ARCHITECTURE 5:
CONTROLLERS
•Controllers

Ember:

Tuesday, November 19, 13

perform two functions in
EMBER ARCHITECTURE 5:
CONTROLLERS
•Controllers

perform two functions in

Ember:
• 1.

Add presentation to the model

Tuesday, November 19, 13
EMBER ARCHITECTURE 5:
CONTROLLERS
•Controllers

perform two functions in

Ember:
• 1.

Add presentation to the model

• 2.

Receive browser events and translate them to
semantic events

Tuesday, November 19, 13
EMBER ARCHITECTURE 5: CONTROLLERS
App.ContractController = Ember.ObjectController.extend({
fullName: function() {
return this.get(“firstName”) + “ “ + this.get(“lastName”);
}.properties(“firstName”, “lastName”)
});
<script type="text/x-handlebars" data-template-name=”contact”>
<div>My full name is: {{fullName}}</div>
</script>

Tuesday, November 19, 13
EMBER ARCHITECTURE 5: CONTROLLERS
App.ContractController = Ember.ObjectController.extend({
fullName: function() {
return this.get(“firstName”) + “ “ + this.get(“lastName”);
}.properties(“firstName”, “lastName”)
});
<script type="text/x-handlebars" data-template-name=”contact”>
<div>My full name is: {{fullName}}</div>
</script>

Tuesday, November 19, 13
EMBER ARCHITECTURE 5: CONTROLLERS
App.TicketsController = Ember.ArrayController.extend({
actions: {
addItem: function() {
this.pushObject(this.get(“ticket”));
}
}
});
<script type="text/x-handlebars" data-template-name="tickets">
<form {{action "addItem" on="submit"}}>
{{input value=ticket}}
<button type=submit>Add</button>
</form>
</script>

Tuesday, November 19, 13
EMBER ARCHITECTURE 5: CONTROLLERS
App.TicketsController = Ember.ArrayController.extend({
actions: {
addItem: function() {
this.pushObject(this.get(“ticket”));
}
}
});
<script type="text/x-handlebars" data-template-name="tickets">
<form {{action "addItem" on="submit"}}>
{{input value=ticket}}
<button type=submit>Add</button>
</form>
</script>

Tuesday, November 19, 13
EMBER ARCHITECTURE 6:
DATA BINDING

Tuesday, November 19, 13
EMBER ARCHITECTURE 6:
DATA BINDING
•Is

done with computed properties

Tuesday, November 19, 13
EMBER ARCHITECTURE 6:
DATA BINDING
•Is

done with computed properties

•Available

on Models, Controllers, Data
Stores, etc.

Tuesday, November 19, 13
EMBER ARCHITECTURE 6:
DATA BINDING
•Is

done with computed properties

•Available

on Models, Controllers, Data
Stores, etc.

•Define

a function property and add
dependencies to it with .properties()

Tuesday, November 19, 13
EMBER ARCHITECTURE 6: DATA BINDING
App.Ticket = Ember.Object.extend({
name: null,
priority: null,
abbreviation: function () {
shortName = this.get('name');
return shortName.slice(0,3);
}.property('name')
});

Tuesday, November 19, 13
EMBER ARCHITECTURE 6: DATA BINDING
App.Ticket = Ember.Object.extend({
name: null,
priority: null,
abbreviation: function () {
shortName = this.get('name');
return shortName.slice(0,3);
}.property('name')
});

Tuesday, November 19, 13
ANGULAR TIME!

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
1: STARTUP

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
1: STARTUP
Angular reads a
marked-up HTML file

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
1: STARTUP
Angular reads a
marked-up HTML file
Processes it according
to directives (yours
and AJS’s)

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
1: STARTUP
Angular reads a
marked-up HTML file
Processes it according
to directives (yours
and AJS’s)
Binds view elements to
Model data
Tuesday, November 19, 13
ANGULAR ARCHITECTURE
2: RUNTIME

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
2: RUNTIME
Angular watches for
events, and changes
to bound entities

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
2: RUNTIME
Angular watches for
events, and changes
to bound entities
Updates bound pairs,
calls watch methods

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
2: RUNTIME
Angular watches for
events, and changes
to bound entities
Updates bound pairs,
calls watch methods
Re-renders the DOM
as a result
Tuesday, November 19, 13
ANGULAR ARCHITECTURE
3: $SCOPE

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
3: $SCOPE
•A special JS object that groups all the stuff for the
current controller context.

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
3: $SCOPE
•A special JS object that groups all the stuff for the
current controller context.

•Has inheritable properties and sub-scopes; a bit
magical

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
3: $SCOPE
•A special JS object that groups all the stuff for the
current controller context.

•Has inheritable properties and sub-scopes; a bit
magical

•Inheritance is determined by controller
inheritance.

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
4:MODELS

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
4:MODELS
•A model is any JS object (not function!) assigned
as a property on the current $scope.

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
4:MODELS
•A model is any JS object (not function!) assigned
as a property on the current $scope.

•No class to extend!

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
4:MODELS
•A model is any JS object (not function!) assigned
as a property on the current $scope.

•No class to extend!
•Automatically available to any controller that uses
that $scope or a sub-scope.

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
4:MODELS
•A model is any JS object (not function!) assigned
as a property on the current $scope.

•No class to extend!
•Automatically available to any controller that uses
that $scope or a sub-scope.

•Automatically two-way bound to view elements
Tuesday, November 19, 13
ANGULAR ARCHITECTURE
5: CONTROLLERS

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
5: CONTROLLERS
•A controller is just any JS function that receives
and processes on a $scope.

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
5: CONTROLLERS
•A controller is just any JS function that receives
and processes on a $scope.

•No class to extend or API to call!

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
5: CONTROLLERS
•A controller is just any JS function that receives
and processes on a $scope.

•No class to extend or API to call!
•Which controller is relevant is determined by the
markup.

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
5: CONTROLLERS
•A controller is just any JS function that receives
and processes on a $scope.

•No class to extend or API to call!
•Which controller is relevant is determined by the
markup.

•Inheritance is determined by the markup, too!
Tuesday, November 19, 13
ANGULAR ARCHITECTURE 5: CONTROLLERS
<div ng-controller="SomeController">
{{name}} is {{comment}}!
<div ng-controller="InnerController">
{{name}} is {{comment}}!
</div>
</div>
function SomeController($scope, []) {
$scope.name = “Evan”
$scope.comment = “really cool”
}
function InnerController($scope, []) {
$scope.comment = “misinformed”
}
#output
Evan is really cool
Evan is misinformed

Tuesday, November 19, 13
ANGULAR ARCHITECTURE 5: CONTROLLERS
<div ng-controller="SomeController">
{{name}} is {{comment}}!
<div ng-controller="InnerController">
{{name}} is {{comment}}!
</div>
</div>
function SomeController($scope, []) {
$scope.name = “Evan”
$scope.comment = “really cool”
}
function InnerController($scope, []) {
$scope.comment = “misinformed”
}
#output
Evan is really cool
Evan is misinformed

Tuesday, November 19, 13
ANGULAR ARCHITECTURE 5: CONTROLLERS
<div ng-controller="SomeController">
{{name}} is {{comment}}!
<div ng-controller="InnerController">
{{name}} is {{comment}}!
</div>
</div>
function SomeController($scope, []) {
$scope.name = “Evan”
$scope.comment = “really cool”
}
function InnerController($scope, []) {
$scope.comment = “misinformed”
}
#output
Evan is really cool!
Evan is misinformed!

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
6: DATA BINDING

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
6: DATA BINDING
•Bound DOM elements and model data autoupdate each other.

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
6: DATA BINDING
•Bound DOM elements and model data autoupdate each other.

•Other code like controller functions that depend
on model data are not auto-updated.

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
6: DATA BINDING
•Bound DOM elements and model data autoupdate each other.

•Other code like controller functions that depend
on model data are not auto-updated.

•but $scope.$watch can create such bindings

Tuesday, November 19, 13
ANGULAR ARCHITECTURE 6: DATA BINDING
<div ng-controller="SomeController">
<input type=‘text’ ng-model=‘name’></input>
You typed {{name}}!
</div>
function SomeController($scope, []) {
# name isn’t even mentioned!
# in fact you don’t even need the controller!
}

Tuesday, November 19, 13
ANGULAR ARCHITECTURE 6: DATA BINDING
<div ng-controller="SomeController">
<input type=‘text’ ng-model=‘name’></input>
You typed {{name}}!
</div>
function SomeController($scope, []) {
# name isn’t even mentioned!
# in fact you don’t even need the controller!
}

Tuesday, November 19, 13
ANGULAR ARCHITECTURE 6: DATA BINDING
<div ng-controller="SomeController">
<input type='text' ng-model='name'></input>
{{crazy_string}}
</div>
function SomeController($scope, []) {
$scope.crazy_string = $scope.name + " is crazy!";
}

Tuesday, November 19, 13
ANGULAR ARCHITECTURE 6: DATA BINDING
<div ng-controller="SomeController">
<input type='text' ng-model='name'></input>
{{crazy_string}}
</div>
function SomeController($scope, []) {
$scope.crazy_string = $scope.name + " is crazy!";
}

Tuesday, November 19, 13
ANGULAR ARCHITECTURE 6: DATA BINDING
<div ng-controller="SomeController">
<input type='text' ng-model='name'></input>
{{crazy_string}}
</div>
function SomeController($scope, []) {
$scope.crazy_string = $scope.name + " is crazy!";
}

Tuesday, November 19, 13
ANGULAR ARCHITECTURE 6: DATA BINDING
<div ng-controller="SomeController">
<input type='text' ng-model='name'></input>
{{crazy_string}}
</div>
function SomeController($scope) {
$scope.$watch('name', function(){
$scope.crazy_string = $scope.name + " is crazy!";
})
}

Tuesday, November 19, 13
ANGULAR ARCHITECTURE 6: DATA BINDING
<div ng-controller="SomeController">
<input type='text' ng-model='name'></input>
{{crazy_string}}
</div>
function SomeController($scope) {
$scope.$watch('name', function(){
$scope.crazy_string = $scope.name + " is crazy!";
})
}

Tuesday, November 19, 13
ANGULAR ARCHITECTURE 6: DATA BINDING
<div ng-controller="SomeController">
<input type='text' ng-model='name'></input>
{{crazy_string}}
</div>
function SomeController($scope) {
$scope.$watch('name', function(){
$scope.crazy_string = $scope.name + " is crazy!";
})
}

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
7: DEPENDENCY INJECTION

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
7: DEPENDENCY INJECTION
•All elements get created created with a name (as
a string) they are known by.

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
7: DEPENDENCY INJECTION
•All elements get created created with a name (as
a string) they are known by.

•Controllers, services, etc.

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
7: DEPENDENCY INJECTION
•All elements get created created with a name (as
a string) they are known by.

•Controllers, services, etc.
•All elements get instantiated with a list of names
they depend on.

Tuesday, November 19, 13
ANGULAR ARCHITECTURE
7: DEPENDENCY INJECTION
•All elements get created created with a name (as
a string) they are known by.

•Controllers, services, etc.
•All elements get instantiated with a list of names
they depend on.

•This makes test isolation trivial
Tuesday, November 19, 13
ANGULAR ARCHITECTURE 7: DI
var ticketApp = angular.module('ticketApp', []);
ticketApp.factory('TicketList', function(){ # ... });
ticketApp.service(‘BackEndAjaxProvider’, function() { #... })
function TicketsController($scope, TicketList) { #... };
function TicketEditController($scope, [TicketList,
BackEndAjaxProvider]) { #... };

Tuesday, November 19, 13
ANGULAR ARCHITECTURE 7: DI
var ticketApp = angular.module('ticketApp', []);
ticketApp.factory('TicketList', function(){ # ... });
ticketApp.service('BackEndAjaxProvider', function() { #... })
function TicketsController($scope, TicketList) { #... };
function TicketEditController($scope, [TicketList,
BackEndAjaxProvider]) { #... };

Tuesday, November 19, 13
ANGULAR ARCHITECTURE 7: DI
var ticketApp = angular.module('ticketApp', []);
ticketApp.factory('TicketList', function(){ # ... });
ticketApp.service(‘BackEndAjaxProvider’, function() { #... })
function TicketsController($scope, TicketList) { #... };
function TicketEditController($scope, TicketList,
BackEndAjaxProvider) { #... };

Tuesday, November 19, 13
SYN-NAPS #2

Tuesday, November 19, 13
SYN-NAPS #2
QUICK Q&A

Tuesday, November 19, 13
DEMO TIME!
(EMBER.JS)

Tuesday, November 19, 13
SYN-NAPS #3

Tuesday, November 19, 13
SYN-NAPS #3
PUPPY BREAK!

Tuesday, November 19, 13
Tuesday, November 19, 13
DEMO TIME!
(ANGULARJS)

Tuesday, November 19, 13
Thanks!
Evan Dorn
and Hannah Howard
Logical Reality Design
http://lrdesign.com
evan@lrdesign.com
@idahoev
hannah@techgirlwonder.com
@techgirlwonder

Tuesday, November 19, 13

Mais conteúdo relacionado

Destaque

Integrating Ember.js into legacy applications
Integrating Ember.js into legacy applicationsIntegrating Ember.js into legacy applications
Integrating Ember.js into legacy applicationsLevelbossMike
 
Parse Apps with Ember.js
Parse Apps with Ember.jsParse Apps with Ember.js
Parse Apps with Ember.jsMatthew Beale
 
Intro to emberjs
Intro to emberjsIntro to emberjs
Intro to emberjsMandy Pao
 
AngularJS - a radically different way of building Single Page Apps
AngularJS - a radically different way of building Single Page AppsAngularJS - a radically different way of building Single Page Apps
AngularJS - a radically different way of building Single Page Appsjivkopetiov
 
Complex Architectures in Ember
Complex Architectures in EmberComplex Architectures in Ember
Complex Architectures in EmberMatthew Beale
 
Ember.js the Second Step
Ember.js the Second StepEmber.js the Second Step
Ember.js the Second StepDopin Ninja
 

Destaque (6)

Integrating Ember.js into legacy applications
Integrating Ember.js into legacy applicationsIntegrating Ember.js into legacy applications
Integrating Ember.js into legacy applications
 
Parse Apps with Ember.js
Parse Apps with Ember.jsParse Apps with Ember.js
Parse Apps with Ember.js
 
Intro to emberjs
Intro to emberjsIntro to emberjs
Intro to emberjs
 
AngularJS - a radically different way of building Single Page Apps
AngularJS - a radically different way of building Single Page AppsAngularJS - a radically different way of building Single Page Apps
AngularJS - a radically different way of building Single Page Apps
 
Complex Architectures in Ember
Complex Architectures in EmberComplex Architectures in Ember
Complex Architectures in Ember
 
Ember.js the Second Step
Ember.js the Second StepEmber.js the Second Step
Ember.js the Second Step
 

Semelhante a Architecture: ember.js and AngularJS

Drupal 8 for site builders
Drupal 8 for site buildersDrupal 8 for site builders
Drupal 8 for site buildersswentel
 
App to App: Design and Surface Local APIs
App to App: Design and Surface Local APIsApp to App: Design and Surface Local APIs
App to App: Design and Surface Local APIsTy Smith
 
Inclusive & Accessible UX Practices – How Low-Fidelity Artifacts Promote Whol...
Inclusive & Accessible UX Practices – How Low-Fidelity Artifacts Promote Whol...Inclusive & Accessible UX Practices – How Low-Fidelity Artifacts Promote Whol...
Inclusive & Accessible UX Practices – How Low-Fidelity Artifacts Promote Whol...Atomic Object
 
UI Engineer - the missing profession, devoxx 2013
UI Engineer - the missing profession, devoxx 2013UI Engineer - the missing profession, devoxx 2013
UI Engineer - the missing profession, devoxx 2013Dierk König
 
Butter Web Browsing with Margarine
Butter Web Browsing with MargarineButter Web Browsing with Margarine
Butter Web Browsing with MargarineWayne Walls
 
Some simple tips for front-end performance in WordPress
Some simple tips for front-end performance in WordPressSome simple tips for front-end performance in WordPress
Some simple tips for front-end performance in WordPressiparr
 
Angrybirds - Overview for a High Performance Shop
Angrybirds - Overview for a High Performance ShopAngrybirds - Overview for a High Performance Shop
Angrybirds - Overview for a High Performance ShopAOE
 
Austin agile conf 2012 infrastructure automation-gmiranda
Austin agile conf 2012 infrastructure automation-gmirandaAustin agile conf 2012 infrastructure automation-gmiranda
Austin agile conf 2012 infrastructure automation-gmirandaGeorge Miranda
 
Inclusive and Accessible UX Practices: How Low-Fi Artifacts Promote Whole-Tea...
Inclusive and Accessible UX Practices: How Low-Fi Artifacts Promote Whole-Tea...Inclusive and Accessible UX Practices: How Low-Fi Artifacts Promote Whole-Tea...
Inclusive and Accessible UX Practices: How Low-Fi Artifacts Promote Whole-Tea...Balanced Team
 
Lessons learned3yearsappstore
Lessons learned3yearsappstoreLessons learned3yearsappstore
Lessons learned3yearsappstoreMohammad Azam
 
Beyond the Box: Opportunities in Augmented Reality
Beyond the Box: Opportunities in Augmented RealityBeyond the Box: Opportunities in Augmented Reality
Beyond the Box: Opportunities in Augmented RealityAdvInteractions
 
Making the Switch, Part 1: Top 5 Things to Consider When Evaluating Drupal
Making the Switch, Part 1: Top 5 Things to Consider When Evaluating DrupalMaking the Switch, Part 1: Top 5 Things to Consider When Evaluating Drupal
Making the Switch, Part 1: Top 5 Things to Consider When Evaluating DrupalAcquia
 
Calabash - Karl and Jonas
Calabash - Karl and JonasCalabash - Karl and Jonas
Calabash - Karl and JonasXamarin
 
How to build an ecosystem for developers by David Bonilla
How to build an ecosystem for developers by David BonillaHow to build an ecosystem for developers by David Bonilla
How to build an ecosystem for developers by David BonillaCodemotion
 
Las maravillas de Google App Engine
Las maravillas de Google App EngineLas maravillas de Google App Engine
Las maravillas de Google App Enginecoto
 
Using AWS to Build a Graph-Based Product Recommendation System (BDT303) | AWS...
Using AWS to Build a Graph-Based Product Recommendation System (BDT303) | AWS...Using AWS to Build a Graph-Based Product Recommendation System (BDT303) | AWS...
Using AWS to Build a Graph-Based Product Recommendation System (BDT303) | AWS...Amazon Web Services
 
Encuentro de desarrolladores moviles
Encuentro de desarrolladores movilesEncuentro de desarrolladores moviles
Encuentro de desarrolladores movilesCarlos Solis
 
Creating Mobile Apps With PHP & Symfony2
Creating Mobile Apps With PHP & Symfony2Creating Mobile Apps With PHP & Symfony2
Creating Mobile Apps With PHP & Symfony2Pablo Godel
 

Semelhante a Architecture: ember.js and AngularJS (20)

Drupal 8 for site builders
Drupal 8 for site buildersDrupal 8 for site builders
Drupal 8 for site builders
 
App to App: Design and Surface Local APIs
App to App: Design and Surface Local APIsApp to App: Design and Surface Local APIs
App to App: Design and Surface Local APIs
 
Inclusive & Accessible UX Practices – How Low-Fidelity Artifacts Promote Whol...
Inclusive & Accessible UX Practices – How Low-Fidelity Artifacts Promote Whol...Inclusive & Accessible UX Practices – How Low-Fidelity Artifacts Promote Whol...
Inclusive & Accessible UX Practices – How Low-Fidelity Artifacts Promote Whol...
 
UI Engineer - the missing profession, devoxx 2013
UI Engineer - the missing profession, devoxx 2013UI Engineer - the missing profession, devoxx 2013
UI Engineer - the missing profession, devoxx 2013
 
Butter Web Browsing with Margarine
Butter Web Browsing with MargarineButter Web Browsing with Margarine
Butter Web Browsing with Margarine
 
Some simple tips for front-end performance in WordPress
Some simple tips for front-end performance in WordPressSome simple tips for front-end performance in WordPress
Some simple tips for front-end performance in WordPress
 
Angrybirds - Overview for a High Performance Shop
Angrybirds - Overview for a High Performance ShopAngrybirds - Overview for a High Performance Shop
Angrybirds - Overview for a High Performance Shop
 
Austin agile conf 2012 infrastructure automation-gmiranda
Austin agile conf 2012 infrastructure automation-gmirandaAustin agile conf 2012 infrastructure automation-gmiranda
Austin agile conf 2012 infrastructure automation-gmiranda
 
Inclusive and Accessible UX Practices: How Low-Fi Artifacts Promote Whole-Tea...
Inclusive and Accessible UX Practices: How Low-Fi Artifacts Promote Whole-Tea...Inclusive and Accessible UX Practices: How Low-Fi Artifacts Promote Whole-Tea...
Inclusive and Accessible UX Practices: How Low-Fi Artifacts Promote Whole-Tea...
 
Lessons learned3yearsappstore
Lessons learned3yearsappstoreLessons learned3yearsappstore
Lessons learned3yearsappstore
 
Beyond the Box: Opportunities in Augmented Reality
Beyond the Box: Opportunities in Augmented RealityBeyond the Box: Opportunities in Augmented Reality
Beyond the Box: Opportunities in Augmented Reality
 
3 d printer
3 d printer3 d printer
3 d printer
 
Making the Switch, Part 1: Top 5 Things to Consider When Evaluating Drupal
Making the Switch, Part 1: Top 5 Things to Consider When Evaluating DrupalMaking the Switch, Part 1: Top 5 Things to Consider When Evaluating Drupal
Making the Switch, Part 1: Top 5 Things to Consider When Evaluating Drupal
 
Calabash - Karl and Jonas
Calabash - Karl and JonasCalabash - Karl and Jonas
Calabash - Karl and Jonas
 
How to build an ecosystem for developers by David Bonilla
How to build an ecosystem for developers by David BonillaHow to build an ecosystem for developers by David Bonilla
How to build an ecosystem for developers by David Bonilla
 
Las maravillas de Google App Engine
Las maravillas de Google App EngineLas maravillas de Google App Engine
Las maravillas de Google App Engine
 
Using AWS to Build a Graph-Based Product Recommendation System (BDT303) | AWS...
Using AWS to Build a Graph-Based Product Recommendation System (BDT303) | AWS...Using AWS to Build a Graph-Based Product Recommendation System (BDT303) | AWS...
Using AWS to Build a Graph-Based Product Recommendation System (BDT303) | AWS...
 
Encuentro de desarrolladores moviles
Encuentro de desarrolladores movilesEncuentro de desarrolladores moviles
Encuentro de desarrolladores moviles
 
Embedjs
EmbedjsEmbedjs
Embedjs
 
Creating Mobile Apps With PHP & Symfony2
Creating Mobile Apps With PHP & Symfony2Creating Mobile Apps With PHP & Symfony2
Creating Mobile Apps With PHP & Symfony2
 

Último

2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Nikki Chapple
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesBernd Ruecker
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkPixlogix Infotech
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...itnewsafrica
 

Último (20)

2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architectures
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App Framework
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
 

Architecture: ember.js and AngularJS