18. Angular
var App = angular.module('App');
App.controller('PostController', function ( $scope, $http ) {
$scope.posts = [];
$http.get('/posts').then( function ( posts ) {
$scope.posts = posts;
});
});
19. Angular
var App = angular.module('App');
App.controller('PostController', function ( $scope, $http ) {
$scope.posts = [];
$http.get('/posts').then( function ( posts ) {
$scope.posts = posts;
});
});
Injected
20. Angular: Under The Hood
Non-injected Function
Module
●
●
●
●
App begins to parse the
HTML
Discovers any directives
Looks at what objects
those directives point to
Pass the un-injected
functions to the injector
Injector
●
●
●
●
Calls .toString on function
RegEx magic to check
what services to inject
Check registry
Creates instance with
injected items and
caches
21. Angular: Under The Hood
Non-injected Function
Module
●
●
●
●
App begins to parse the
HTML
Discovers any directives
Looks at what objects
those directives point to
Pass the un-injected
functions to the injector
Injector
Inverted Control
●
●
●
●
Calls .toString on function
RegEx magic to check
what services to inject
Check registry
Creates instance with
injected items and
caches
31. Ember: Under The Hood
Container
Application
Initializers
●
●
Application creates container
Initializers register low-level
modules into the container
32. Ember: Under The Hood
●
Registry
●
●
Container
Injections
●
Lookup
Modules are registered into the
registry
Injections are held in a separate
map
Lookup checks to see if the
module is available and also if
the requested module needs to
be injected
Lookup then creates the
instance with the injections
33. Ember: Under The Hood
●
Registry
●
●
Container
Injections
●
Lookup
Modules are registered into the
registry
Injections are held in a separate
map
Lookup checks to see if the
module is available and also if
the requested module needs to
be injected
Lookup then creates the
instance with the injections
Inverted Control
35. A Closer Look
var Session = Ember.Object.extend({
key: 'jkldsajlksldkjsjlad2312ekljk3'
});
var PostsController = Ember.Object.extend();
var PostController = Ember.Object.extend();
var container = new Ember.Container();
container.register('session:main', Session );
container.register('controller:posts', PostsController );
container.register('controller:post', PostController );
container.inject('controller', 'session', 'session:main');
var postController = container.lookup('controller:post');
postController.get('session.key') // jkldsajlksldkjsjlad2312ekljk3
36. A Closer Look
var Session = Ember.Object.extend({
key: 'jkldsajlksldkjsjlad2312ekljk3'
});
var PostsController = Ember.Object.extend();
var PostController = Ember.Object.extend();
var container = new Ember.Container();
container.register('session:main', Session );
container.register('controller:posts', PostsController );
container.register('controller:post', PostController );
container.inject('controller', 'session', 'session:main');
All controllers
var postController = container.lookup('controller:post');
postController.get('session.key') // jkldsajlksldkjsjlad2312ekljk3
37. A Closer Look
var Session = Ember.Object.extend({
key: 'jkldsajlksldkjsjlad2312ekljk3'
});
var PostsController = Ember.Object.extend();
var PostController = Ember.Object.extend();
var container = new Ember.Container();
container.register('session:main', Session );
container.register('controller:posts', PostsController );
container.register('controller:post', PostController );
container.inject('controller', 'session', 'session:main');
Add a property “session”
var postController = container.lookup('controller:post');
postController.get('session.key') // jkldsajlksldkjsjlad2312ekljk3
38. A Closer Look
var Session = Ember.Object.extend({
key: 'jkldsajlksldkjsjlad2312ekljk3'
});
var PostsController = Ember.Object.extend();
var PostController = Ember.Object.extend();
var container = new Ember.Container();
container.register('session:main', Session );
container.register('controller:posts', PostsController );
container.register('controller:post', PostController );
container.inject('controller', 'session', 'session:main');
With the instance of ‘session:main’
var postController = container.lookup('controller:post');
postController.get('session.key') // jkldsajlksldkjsjlad2312ekljk3
39. A Closer Look
var Session = Ember.Object.extend({
key: 'jkldsajlksldkjsjlad2312ekljk3'
});
var PostsController = Ember.Object.extend();
var PostController = Ember.Object.extend();
var container = new Ember.Container();
container.register('session:main', Session );
container.register('controller:posts', PostsController );
container.register('controller:post', PostController );
container.inject('controller', 'session', 'session:main');
var postController = container.lookup('controller:post');
postController.get('session.key') // jkldsajlksldkjsjlad2312ekljk3
40. A Closer Look cont.
var postsController = container.lookup('controller:posts');
postsController.get('session.key') //
jkldsajlksldkjsjlad2312ekljk3
console.log( postsController.container ) // Points to container
console.log( postController.container ) // Points to container
console.log(
postController.container.lookup( 'controller:posts' )
) // Points to the same posts controller instance in memory
41. Ember’s Elegant APIs
App.PostController = Ember.Controller.extend({
// Fetches the comments controller and then sets
// this.controllers.comments to the comments instance
needs: ['comments']
});
App.PostRoute = Ember.Route.extend({
setupController: function(){
// Returns the comments instance
var comments = this.controllerFor('comments');
// Returns the comments model
var commentsModel = this.modelFor('comments');
}
});