SlideShare a Scribd company logo
MODULES IN
ANGULAR2
@DRPICOX
MODULE =
MODULES IN NG1
INJECTIONS CONFIG RUN+ +
angular.module(‘…’, […])
angular.module(‘booksServices’,[])
.value(‘Book’, Book)
.service(‘booksService’, BookService)
.factory(‘booksDictionary’, booksDictionaryFactory)
.provider(‘booksRemote’, BooksRemoteProvider)
INJECTIONS
booksDictionaryFactory.$inject = [‘Book’];
function booksDictionaryFactory ( Book ) {
…
}
MODULES IN NG1
$injector
{
‘Book’: Book,
}
INJECTIONS
angular.module(‘booksServices’,[])
.value(‘Book’, Book)
.service(‘booksService’, BookService)
.factory(‘booksDictionary’, booksDictionaryFactory)
.provider(‘booksRemote’, BooksRemoteProvider)
LibraryService.$inject = [‘booksService’];
function LibraryService ( booksService ) {
…
}
MODULES IN NG1
$injector
{
‘Book’: Book,
‘booksService’: new BooksService(),
}
INJECTIONS
angular.module(‘booksServices’,[])
.value(‘Book’, Book)
.service(‘booksService’, BookService)
.factory(‘booksDictionary’, booksDictionaryFactory)
.provider(‘booksRemote’, BooksRemoteProvider)
MODULES IN NG1
$injector
{
‘Book’: Book,
‘booksService’: new BooksService(),
‘booksDictionary’: booksDictionaryFactory(),
}
BooksService.$inject = [‘booksDictionary’,’booksRemote’];
function BooksService ( booksDictionary , booksRemote ) {
…
}
INJECTIONS
angular.module(‘booksServices’,[])
.value(‘Book’, Book)
.service(‘booksService’, BookService)
.factory(‘booksDictionary’, booksDictionaryFactory)
.provider(‘booksRemote’, BooksRemoteProvider)
MODULES IN NG1
$injector
{
‘Book’: Book,
‘booksService’: new BooksService(),
‘booksDictionary’: booksDictionaryFactory(),
‘booksRemote’: new BooksRemoteProvider().$get(),
}
BooksService.$inject = [‘booksDictionary’,’booksRemote’];
function BooksService ( booksDictionary , booksRemote ) {
…
}
INJECTIONS
angular.module(‘booksServices’,[])
.value(‘Book’, Book)
.service(‘booksService’, BookService)
.factory(‘booksDictionary’, booksDictionaryFactory)
.provider(‘booksRemote’, BooksRemoteProvider)
{
‘Book’: Book,
‘booksService’: new BooksService(),
‘booksDictionary’: booksDictionaryFactory(),
‘booksRemote’: new BooksRemoteProvider().$get(),
}
MODULES IN NG1
$injector
Catalog from injections how to create instances
A dictionary of instances already created to be reused
MODULES IN NG1
angular.module(‘booksStoreApp’, [
‘booksServices’, ‘booksComponents’
])
angular.module(‘booksServices’,[])
MODULES IN NG1
booksServices
injections
booksS
erv…
angular.module(‘bookStoreApp’, [
‘booksServices’, ‘booksComponents’
]);
booksS
erv…
angular.module(‘booksComponents’,[])
booksComponents
injections
booksC
omp…
booksC
omp…
+
=
angular.module(‘bookStoreApp’,[‘booksServices’,’booksComponents’])
booksServices
injections
booksC
omp…
booksS
erv…
booksComponents
injections
booksS
erv…
booksC
omp…
MODULES IN NG1
In Angular1 there is only one injector.
booksServices
injections
booksComponents
injections
$injector
MODULES IN NG1
In Angular1 there is only one injector.
That shares instances among all angular application.
(any “artifact” may demand any instance, no limits, aware with name aliasing)
booksServices
injections
booksComponents
injections
$injector
ng
injections
ngSanitize
injections
ngAria
injections
ngAnimate
injections
ngCookies
injections
ngTouch
injections
ngCordova
injections
mgcrea.ngStrap
injections
ui.router
injections
ngFileUpload
injections
{
‘booksService’: new BooksService(),
…
}
¿WHAT
ABOUT
ANGULAR2?
NG2
THERE ARE NO MODULES
MODULES IN NG2
MODULES IN NG2
THERE ARE NO MODULES
// boot.js
'use strict';
var bootstrap = require('angular2/platform/browser').bootstrap;
var BookStoreComponent = require(‘./bookstore').BookStoreComponent;
var BOOKSTORE_PROVIDERS = require(‘./bookstore').BOOKSTORE_PROVIDERS;
exports = boot;
function boot() {
bootstrap(BookStoreComponent,[BOOKSTORE_PROVIDERS]);
}
What is BOOKSTORE_PROVIDERS?
MODULES IN NG2
THERE ARE NO MODULES
// bookstore/index.js
'use strict';
var BOOKS_COMPONENTS_PROVIDERS =
require(‘./books-components’).BOOKS_COMPONENTS_PROVIDERS;
var BOOKS_SERVICES_PROVIDERS =
require(‘./books-services’).BOOKS_SERVICES_PROVIDERS;
exports.BookStoreComponent = require(‘./BookStoreComponent’);
exports.BOOKSTORE_PROVIDERS = [
BOOKS_COMPONENTS_PROVIDERS,
BOOKS_SERVICES_PROVIDERS,
];
BOOKSTORE_PROVIDERS is an array with more providers.
What are BOOKS_SERVICES_PROVIDERS, BOOKS_COMPONENTS_PROVIDERS?
MODULES IN NG2
THERE ARE NO MODULES
// bookstore/books-services/index.js
'use strict';
var Book = require(‘./Book’);
var BooksService = require(‘./BooksService’);
var booksDictionaryFactory = require(‘./booksDictionaryFactory’);
var BooksRemoteProvider = require(‘./BooksRemoteProvider’);
// ^^^ extends Provider ???
X
MODULES IN NG2
THERE ARE NO MODULES
// bookstore/books-services/index.js
…
exports.Book = Book;
exports.BooksService = BooksService;
var BooksDictionary = {}; // a dummy to have a symbol for injection ???
exports.BooksDictionary = BooksDictionary; // do not export factory
export.BooksRemoteProvider = BooksRemoteProvider;
export.BooksRemote = BooksRemoteProvider.BooksRemote; // ???
…
X
MODULES IN NG2
THERE ARE NO MODULES
// bookstore/books-services/index.js
…
var provide = require(‘angular2/core’).provide;
var HTTP_PROVIDERS = require(‘angular2/http').HTTP_PROVIDERS;
exports.BOOKS_SERVICES_PROVIDERS = [
HTTP_PROVIDERS,
provide(Book, {useValue: Book}),
BooksService, // === provide(BooksService, {useClass: BooksService})
provide(BooksDictionary, {useFactory: booksDictionaryFactory}),
BooksRemoteProvider,
];
X
MODULES IN NG2
THERE ARE NO MODULES
What I did wrong?
X
EASY TO GO RECIPE
MODULES IN NG2
EASY TO GO RECIPE
MODULES NG2
• Do not add value classes to PROVIDERS (like Book),

you may use export/import/require

(like components)
• Have only Services (provide(Class, {useClass: ClassName}))

(and use short form)
So… only use PROVIDERS for such things that you need a singleton.
Rule of thumb: do not define providers for classes in which have many “new”
(like Book, or like Components)
MODULES IN NG2
EASY TO GO RECIPE
// bookstore/books-services/index.js
'use strict';
var BooksService = require(‘./BooksService’);
var BooksDictionary = require(‘./BooksDictionary’);
var BooksRemote = require(‘./BooksRemote’);
exports.Book = Book;
exports.BooksService = BooksService;
exports.BooksDictionary = BooksDictionary;
exports.BooksRemote = BooksRemote;
var HTTP_PROVIDERS = require(‘angular2/http').HTTP_PROVIDERS;
exports.BOOKS_SERVICES_PROVIDERS = [
HTTP_PROVIDERS,
BooksService, BooksDictionary, BooksRemoteProvider,
];
Much better!
MODULES IN NG2
EASY TO GO RECIPE WITH COMPONENTS
// bookstore/books-services/index.js
'use strict';
exports.BookEditorComponent = require(‘./BookEditorComponent’);
exports.BookViewerComponent = require(‘./BookViewerComponent’);
exports.BooksListComponent = require(‘./BooksListComponent’);
// it requires books providers
var BOOKS_SERVICES_PROVIDERS =
require(‘../books-services’).BOOKS_SERVICES_PROVIDERS;
exports.BOOKS_COMPONENTS_PROVIDERS = [
BOOKS_SERVICES_PROVIDERS,
];
Nothing happens if the same “provider” is included twice.
MODULES IN NG2
FINAL PROVIDERS
Nothing happens if the same “provider” is included twice.
BOOKSTORE_PROVIDERS
===
[
BOOKS_COMPONENTS_PROVIDERS,
BOOKS_SERVICES_PROVIDERS,
];
MODULES IN NG2
FINAL PROVIDERS
Nothing happens if the same “provider” is included twice.
BOOKSTORE_PROVIDERS
===
[
BOOKS_COMPONENTS_PROVIDERS,
BOOKS_SERVICES_PROVIDERS,
];
BOOKS_COMPONENTS_PROVIDERS
===
[
BOOKS_COMPONENTS_PROVIDERS,
];
MODULES IN NG2
FINAL PROVIDERS
Nothing happens if the same “provider” is included twice.
BOOKSTORE_PROVIDERS
===
[
[
BOOKS_SERVICES_PROVIDERS
],
BOOKS_SERVICES_PROVIDERS,
];
BOOKS_COMPONENTS_PROVIDERS
===
[
BOOKS_COMPONENTS_PROVIDERS,
];
MODULES IN NG2
FINAL PROVIDERS
Nothing happens if the same “provider” is included twice.
BOOKSTORE_PROVIDERS
===
[
[
BOOKS_SERVICES_PROVIDERS
],
BOOKS_SERVICES_PROVIDERS,
];
BOOKS_SERVICES_PROVIDERS
===
[
HTTP_PROVIDERS,
BooksService,
BooksDictionary,
BooksRemoteProvider,
];
MODULES IN NG2
FINAL PROVIDERS
Nothing happens if the same “provider” is included twice.
BOOKSTORE_PROVIDERS
===
[
[
[
HTTP_PROVIDERS,
BooksService,
BooksDictionary,
BooksRemoteProvider,
]
],
[
HTTP_PROVIDERS,
BooksService,
BooksDictionary,
BooksRemoteProvider,
],
];
BOOKS_SERVICES_PROVIDERS
===
[
HTTP_PROVIDERS,
BooksService,
BooksDictionary,
BooksRemoteProvider,
];
MODULES IN NG2
FINAL PROVIDERS
Nothing happens if the same “provider” is included twice.
BOOKSTORE_PROVIDERS
===
[
[
[
HTTP_PROVIDERS,
BooksService,
BooksDictionary,
BooksRemoteProvider,
]
],
[
HTTP_PROVIDERS,
BooksService,
BooksDictionary,
BooksRemoteProvider,
],
];
HTTP_PROVIDERS
===
export const HTTP_PROVIDERS: any[] = [
// TODO(pascal): use factory type annotations once supported
// issue: https://github.com/angular/angular/issues/3183
provide(Http,
{
useFactory: (xhrBackend, requestOptions) =>
new Http(xhrBackend, requestOptions),
deps: [XHRBackend, RequestOptions]
}),
BrowserXhr,
provide(RequestOptions, {useClass: BaseRequestOptions}),
provide(ResponseOptions, {useClass: BaseResponseOptions}),
XHRBackend
];
https://github.com/angular/angular/blob/
2.0.0-beta.2/modules/angular2/http.ts#L154-L166
MODULES IN NG2
FINAL PROVIDERS
Nothing happens if the same “provider” is included twice.
BOOKSTORE_PROVIDERS
===
[
[
[
[…],
BooksService,
BooksDictionary,
BooksRemoteProvider,
]
],
[
[…],
BooksService,
BooksDictionary,
BooksRemoteProvider,
],
];
HTTP_PROVIDERS
===
export const HTTP_PROVIDERS: any[] = [
// TODO(pascal): use factory type annotations once supported
// issue: https://github.com/angular/angular/issues/3183
provide(Http,
{
useFactory: (xhrBackend, requestOptions) =>
new Http(xhrBackend, requestOptions),
deps: [XHRBackend, RequestOptions]
}),
BrowserXhr,
provide(RequestOptions, {useClass: BaseRequestOptions}),
provide(ResponseOptions, {useClass: BaseResponseOptions}),
XHRBackend
];
https://github.com/angular/angular/blob/
2.0.0-beta.2/modules/angular2/http.ts#L154-L166
SO… WHAT IS A “MODULE” IN ANGULAR2?
MODULES IN NG2
ANGULAR2 MODULES
MODULES NG2
• A module is a resource that exports:
• Components
• Classes
• And an array of PROVIDERS

(does not matter if we repeat things)
MODULES IN NG2
“MODULE” EXAMPLE 1
// bookstore/index.js
'use strict';
var BOOKS_COMPONENTS_PROVIDERS =
require(‘./books-components’).BOOKS_COMPONENTS_PROVIDERS;
var BOOKS_SERVICES_PROVIDERS =
require(‘./books-services’).BOOKS_SERVICES_PROVIDERS;
exports.BookStoreComponent = require(‘./BookStoreComponent’);
exports.BOOKSTORE_PROVIDERS = [
BOOKS_COMPONENTS_PROVIDERS,
BOOKS_SERVICES_PROVIDERS,
];
MODULES IN NG2
“MODULE” EXAMPLE 2
// bookstore/books-services/index.js
'use strict';
var BooksService = require(‘./BooksService’);
var BooksDictionary = require(‘./BooksDictionary’);
var BooksRemote = require(‘./BooksRemote’);
exports.Book = Book;
exports.BooksService = BooksService;
exports.BooksDictionary = BooksDictionary;
exports.BooksRemote = BooksRemote;
var HTTP_PROVIDERS = require(‘angular2/http').HTTP_PROVIDERS;
exports.BOOKS_SERVICES_PROVIDERS = [
HTTP_PROVIDERS,
BooksService, BooksDictionary, BooksRemoteProvider,
];
MODULES IN NG2
“MODULE” EXAMPLE 3
// bookstore/books-services/index.js
'use strict';
exports.BookEditorComponent = require(‘./BookEditorComponent’);
exports.BookViewerComponent = require(‘./BookViewerComponent’);
exports.BooksListComponent = require(‘./BooksListComponent’);
// it requires books providers
var BOOKS_SERVICES_PROVIDERS =
require(‘../books-services’).BOOKS_SERVICES_PROVIDERS;
exports.BOOKS_COMPONENTS_PROVIDERS = [
BOOKS_SERVICES_PROVIDERS,
];
ONE MORE THING…
MODULES IN NG2
ANGULAR 2 HAS MULTIPLE INJECTORS
MODULES IN NG2
ANGULAR 2 HAS UP TO ONE INJECTOR PER COMPONENT
MODULES IN NG2
ANGULAR 2 HAS MULTIPLE INJECTORS
MODULES NG2
ANGULAR 2 HAS MULTIPLE INJECTORS
MODULES NG2
• Angular2 has “almost” one injector per component
• There is a tree of injectors, if something is not found in your level,
it looks upper
• You can nest Angular2 apps (YEAH!)
• You can create providers for view models

(aka no more global model for toggle the state of the search bar)
MODULES IN NG2
ANGULAR 2 HAS MULTIPLE INJECTORS
import {Component, Input, Output, EventEmitter} from 'angular2/core';
import {RestoreService} from './restore.service';
import {Hero} from ‘./hero';
@Component({
selector: 'hero-editor',
providers: [RestoreService],
template: …
})
export class HeroEditorComponent {
…
}
https://angular.io/docs/ts/latest/guide/hierarchical-dependency-injection.html
DISCLAIMER
• I’m not an expert in Angular2, just a beginner
• I present it because I found very few example and nothing talking
about “modules”
• I want to share it so I can help others to save time
• Tests were done on Angular v2.0.0-beta.1, current is v2.0.0-beta.2,
but there is room for change

More Related Content

PDF
Mvc - Model: the great forgotten
PDF
MVS: An angular MVC
PDF
A single language for backend and frontend from AngularJS to cloud with Clau...
PDF
Firebase for Apple Developers
PDF
 +  = ❤️ (Firebase for Apple Developers) at Swift Leeds
PDF
Firebase for Apple Developers - SwiftHeroes
PPTX
JAVASCRIPT and JQUERY For Beginner
KEY
An Introduction to Ruby on Rails
Mvc - Model: the great forgotten
MVS: An angular MVC
A single language for backend and frontend from AngularJS to cloud with Clau...
Firebase for Apple Developers
 +  = ❤️ (Firebase for Apple Developers) at Swift Leeds
Firebase for Apple Developers - SwiftHeroes
JAVASCRIPT and JQUERY For Beginner
An Introduction to Ruby on Rails

What's hot (20)

PDF
Simpler Core Data with RubyMotion
PPT
Jasig Rubyon Rails
PDF
Difference between java script and jquery
PPT
Learn javascript easy steps
PDF
Intro to React
PDF
jQuery - Chapter 4 - DOM Handling
PDF
Going fullstack React(ive) - Paulo Lopes - Codemotion Amsterdam 2017
PDF
[4developers] The saga pattern v3- Robert Pankowiecki
PPTX
Dart and AngularDart
PPTX
Single Page Applications Workshop Part I: Interesting Topics in HTML5, CSS an...
PDF
jQuery -Chapter 2 - Selectors and Events
PDF
jQuery - Chapter 3 - Effects
PPT
PPTX
Single Page Applications Workshop Part II: Single Page Applications using Ang...
PDF
Introduction to Jquery
PPT
Ruby On Rails
PDF
ParisJS #10 : RequireJS
PPS
Underscore
PPTX
JavaScript and jQuery Basics
DOCX
Controller in AngularJS
Simpler Core Data with RubyMotion
Jasig Rubyon Rails
Difference between java script and jquery
Learn javascript easy steps
Intro to React
jQuery - Chapter 4 - DOM Handling
Going fullstack React(ive) - Paulo Lopes - Codemotion Amsterdam 2017
[4developers] The saga pattern v3- Robert Pankowiecki
Dart and AngularDart
Single Page Applications Workshop Part I: Interesting Topics in HTML5, CSS an...
jQuery -Chapter 2 - Selectors and Events
jQuery - Chapter 3 - Effects
Single Page Applications Workshop Part II: Single Page Applications using Ang...
Introduction to Jquery
Ruby On Rails
ParisJS #10 : RequireJS
Underscore
JavaScript and jQuery Basics
Controller in AngularJS
Ad

Viewers also liked (15)

PDF
Freelance i Enginyeria
PDF
Angular 1.X Community and API Decissions
PPTX
Angular2 inter3
PPTX
Angular2 router&http
PDF
Adventures with Angular 2
PDF
How Angular2 Can Improve Your AngularJS Apps Today!
PDF
Angular2 - getting-ready
PDF
Angular2 workshop
PDF
Angular 2 - Core Concepts
PPTX
RxJS and Reactive Programming - Modern Web UI - May 2015
ODP
Introduction to Angular 2
PDF
Getting Started with Angular 2
PPTX
From high school to university and work
PDF
Building Universal Applications with Angular 2
Freelance i Enginyeria
Angular 1.X Community and API Decissions
Angular2 inter3
Angular2 router&http
Adventures with Angular 2
How Angular2 Can Improve Your AngularJS Apps Today!
Angular2 - getting-ready
Angular2 workshop
Angular 2 - Core Concepts
RxJS and Reactive Programming - Modern Web UI - May 2015
Introduction to Angular 2
Getting Started with Angular 2
From high school to university and work
Building Universal Applications with Angular 2
Ad

Similar to Modules in angular 2.0 beta.1 (20)

PDF
better-apps-angular-2-day1.pdf and home
PDF
Introduction to Angular 2
PPTX
PPTX
Moving From AngularJS to Angular 2
PDF
Angular 2.0
PDF
Angular 2 Essential Training
PDF
Angular 2 for Java Developers
PDF
Angular2 with type script
ODP
Best episode ever: Angular 2 from the perspective of an Angular 1 developer
PPTX
What's new in Angular 2?
PPTX
Angular modules in depth
PDF
Angular2 Development for Java developers
PPTX
PPTX
An afternoon with angular 2
PPTX
Introduction to Angular2
PPTX
An evening with Angular 2
PPTX
Introduction to Angular2
PDF
XebiConFr 15 - Brace yourselves Angular 2 is coming
PPTX
Neoito — Design patterns and depenedency injection
PPT
17612235.ppt
better-apps-angular-2-day1.pdf and home
Introduction to Angular 2
Moving From AngularJS to Angular 2
Angular 2.0
Angular 2 Essential Training
Angular 2 for Java Developers
Angular2 with type script
Best episode ever: Angular 2 from the perspective of an Angular 1 developer
What's new in Angular 2?
Angular modules in depth
Angular2 Development for Java developers
An afternoon with angular 2
Introduction to Angular2
An evening with Angular 2
Introduction to Angular2
XebiConFr 15 - Brace yourselves Angular 2 is coming
Neoito — Design patterns and depenedency injection
17612235.ppt

More from David Rodenas (20)

PDF
TDD CrashCourse Part2: TDD
PDF
TDD CrashCourse Part1: Testing
PDF
TDD CrashCourse Part3: TDD Techniques
PDF
TDD CrashCourse Part5: Testing Techniques
PDF
TDD CrashCourse Part4: Improving Testing
PDF
Be professional: We Rule the World
PDF
ES3-2020-P3 TDD Calculator
PDF
ES3-2020-P2 Bowling Game Kata
PDF
ES3-2020-07 Testing techniques
PDF
ES3-2020-06 Test Driven Development (TDD)
PDF
ES3-2020-05 Testing
PDF
Testing, Learning and Professionalism — 20171214
PDF
ReactJS for Programmers
PDF
Vespres
PDF
Faster web pages
PDF
Redux for ReactJS Programmers
PDF
Basic Tutorial of React for Programmers
PDF
Introduction to web programming for java and c# programmers by @drpicox
PDF
JS and patterns
PDF
(automatic) Testing: from business to university and back
TDD CrashCourse Part2: TDD
TDD CrashCourse Part1: Testing
TDD CrashCourse Part3: TDD Techniques
TDD CrashCourse Part5: Testing Techniques
TDD CrashCourse Part4: Improving Testing
Be professional: We Rule the World
ES3-2020-P3 TDD Calculator
ES3-2020-P2 Bowling Game Kata
ES3-2020-07 Testing techniques
ES3-2020-06 Test Driven Development (TDD)
ES3-2020-05 Testing
Testing, Learning and Professionalism — 20171214
ReactJS for Programmers
Vespres
Faster web pages
Redux for ReactJS Programmers
Basic Tutorial of React for Programmers
Introduction to web programming for java and c# programmers by @drpicox
JS and patterns
(automatic) Testing: from business to university and back

Recently uploaded (20)

PDF
Wondershare Filmora 15 Crack With Activation Key [2025
PDF
How to Choose the Right IT Partner for Your Business in Malaysia
PPTX
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
PPTX
Operating system designcfffgfgggggggvggggggggg
PDF
Adobe Illustrator 28.6 Crack My Vision of Vector Design
PDF
Digital Systems & Binary Numbers (comprehensive )
PPTX
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
PDF
top salesforce developer skills in 2025.pdf
PDF
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
PPT
Introduction Database Management System for Course Database
PPTX
CHAPTER 2 - PM Management and IT Context
PDF
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
PPTX
Transform Your Business with a Software ERP System
PDF
How to Migrate SBCGlobal Email to Yahoo Easily
PDF
System and Network Administraation Chapter 3
PDF
Nekopoi APK 2025 free lastest update
PDF
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
PDF
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
PDF
Digital Strategies for Manufacturing Companies
PDF
medical staffing services at VALiNTRY
Wondershare Filmora 15 Crack With Activation Key [2025
How to Choose the Right IT Partner for Your Business in Malaysia
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
Operating system designcfffgfgggggggvggggggggg
Adobe Illustrator 28.6 Crack My Vision of Vector Design
Digital Systems & Binary Numbers (comprehensive )
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
top salesforce developer skills in 2025.pdf
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
Introduction Database Management System for Course Database
CHAPTER 2 - PM Management and IT Context
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
Transform Your Business with a Software ERP System
How to Migrate SBCGlobal Email to Yahoo Easily
System and Network Administraation Chapter 3
Nekopoi APK 2025 free lastest update
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
Digital Strategies for Manufacturing Companies
medical staffing services at VALiNTRY

Modules in angular 2.0 beta.1

  • 2. MODULE = MODULES IN NG1 INJECTIONS CONFIG RUN+ + angular.module(‘…’, […])
  • 3. angular.module(‘booksServices’,[]) .value(‘Book’, Book) .service(‘booksService’, BookService) .factory(‘booksDictionary’, booksDictionaryFactory) .provider(‘booksRemote’, BooksRemoteProvider) INJECTIONS booksDictionaryFactory.$inject = [‘Book’]; function booksDictionaryFactory ( Book ) { … } MODULES IN NG1 $injector { ‘Book’: Book, }
  • 4. INJECTIONS angular.module(‘booksServices’,[]) .value(‘Book’, Book) .service(‘booksService’, BookService) .factory(‘booksDictionary’, booksDictionaryFactory) .provider(‘booksRemote’, BooksRemoteProvider) LibraryService.$inject = [‘booksService’]; function LibraryService ( booksService ) { … } MODULES IN NG1 $injector { ‘Book’: Book, ‘booksService’: new BooksService(), }
  • 5. INJECTIONS angular.module(‘booksServices’,[]) .value(‘Book’, Book) .service(‘booksService’, BookService) .factory(‘booksDictionary’, booksDictionaryFactory) .provider(‘booksRemote’, BooksRemoteProvider) MODULES IN NG1 $injector { ‘Book’: Book, ‘booksService’: new BooksService(), ‘booksDictionary’: booksDictionaryFactory(), } BooksService.$inject = [‘booksDictionary’,’booksRemote’]; function BooksService ( booksDictionary , booksRemote ) { … }
  • 6. INJECTIONS angular.module(‘booksServices’,[]) .value(‘Book’, Book) .service(‘booksService’, BookService) .factory(‘booksDictionary’, booksDictionaryFactory) .provider(‘booksRemote’, BooksRemoteProvider) MODULES IN NG1 $injector { ‘Book’: Book, ‘booksService’: new BooksService(), ‘booksDictionary’: booksDictionaryFactory(), ‘booksRemote’: new BooksRemoteProvider().$get(), } BooksService.$inject = [‘booksDictionary’,’booksRemote’]; function BooksService ( booksDictionary , booksRemote ) { … }
  • 7. INJECTIONS angular.module(‘booksServices’,[]) .value(‘Book’, Book) .service(‘booksService’, BookService) .factory(‘booksDictionary’, booksDictionaryFactory) .provider(‘booksRemote’, BooksRemoteProvider) { ‘Book’: Book, ‘booksService’: new BooksService(), ‘booksDictionary’: booksDictionaryFactory(), ‘booksRemote’: new BooksRemoteProvider().$get(), } MODULES IN NG1 $injector Catalog from injections how to create instances A dictionary of instances already created to be reused
  • 8. MODULES IN NG1 angular.module(‘booksStoreApp’, [ ‘booksServices’, ‘booksComponents’ ])
  • 9. angular.module(‘booksServices’,[]) MODULES IN NG1 booksServices injections booksS erv… angular.module(‘bookStoreApp’, [ ‘booksServices’, ‘booksComponents’ ]); booksS erv… angular.module(‘booksComponents’,[]) booksComponents injections booksC omp… booksC omp… + = angular.module(‘bookStoreApp’,[‘booksServices’,’booksComponents’]) booksServices injections booksC omp… booksS erv… booksComponents injections booksS erv… booksC omp…
  • 10. MODULES IN NG1 In Angular1 there is only one injector. booksServices injections booksComponents injections $injector
  • 11. MODULES IN NG1 In Angular1 there is only one injector. That shares instances among all angular application. (any “artifact” may demand any instance, no limits, aware with name aliasing) booksServices injections booksComponents injections $injector ng injections ngSanitize injections ngAria injections ngAnimate injections ngCookies injections ngTouch injections ngCordova injections mgcrea.ngStrap injections ui.router injections ngFileUpload injections { ‘booksService’: new BooksService(), … }
  • 13. THERE ARE NO MODULES MODULES IN NG2
  • 14. MODULES IN NG2 THERE ARE NO MODULES // boot.js 'use strict'; var bootstrap = require('angular2/platform/browser').bootstrap; var BookStoreComponent = require(‘./bookstore').BookStoreComponent; var BOOKSTORE_PROVIDERS = require(‘./bookstore').BOOKSTORE_PROVIDERS; exports = boot; function boot() { bootstrap(BookStoreComponent,[BOOKSTORE_PROVIDERS]); } What is BOOKSTORE_PROVIDERS?
  • 15. MODULES IN NG2 THERE ARE NO MODULES // bookstore/index.js 'use strict'; var BOOKS_COMPONENTS_PROVIDERS = require(‘./books-components’).BOOKS_COMPONENTS_PROVIDERS; var BOOKS_SERVICES_PROVIDERS = require(‘./books-services’).BOOKS_SERVICES_PROVIDERS; exports.BookStoreComponent = require(‘./BookStoreComponent’); exports.BOOKSTORE_PROVIDERS = [ BOOKS_COMPONENTS_PROVIDERS, BOOKS_SERVICES_PROVIDERS, ]; BOOKSTORE_PROVIDERS is an array with more providers. What are BOOKS_SERVICES_PROVIDERS, BOOKS_COMPONENTS_PROVIDERS?
  • 16. MODULES IN NG2 THERE ARE NO MODULES // bookstore/books-services/index.js 'use strict'; var Book = require(‘./Book’); var BooksService = require(‘./BooksService’); var booksDictionaryFactory = require(‘./booksDictionaryFactory’); var BooksRemoteProvider = require(‘./BooksRemoteProvider’); // ^^^ extends Provider ??? X
  • 17. MODULES IN NG2 THERE ARE NO MODULES // bookstore/books-services/index.js … exports.Book = Book; exports.BooksService = BooksService; var BooksDictionary = {}; // a dummy to have a symbol for injection ??? exports.BooksDictionary = BooksDictionary; // do not export factory export.BooksRemoteProvider = BooksRemoteProvider; export.BooksRemote = BooksRemoteProvider.BooksRemote; // ??? … X
  • 18. MODULES IN NG2 THERE ARE NO MODULES // bookstore/books-services/index.js … var provide = require(‘angular2/core’).provide; var HTTP_PROVIDERS = require(‘angular2/http').HTTP_PROVIDERS; exports.BOOKS_SERVICES_PROVIDERS = [ HTTP_PROVIDERS, provide(Book, {useValue: Book}), BooksService, // === provide(BooksService, {useClass: BooksService}) provide(BooksDictionary, {useFactory: booksDictionaryFactory}), BooksRemoteProvider, ]; X
  • 19. MODULES IN NG2 THERE ARE NO MODULES What I did wrong? X
  • 20. EASY TO GO RECIPE MODULES IN NG2
  • 21. EASY TO GO RECIPE MODULES NG2 • Do not add value classes to PROVIDERS (like Book),
 you may use export/import/require
 (like components) • Have only Services (provide(Class, {useClass: ClassName}))
 (and use short form) So… only use PROVIDERS for such things that you need a singleton. Rule of thumb: do not define providers for classes in which have many “new” (like Book, or like Components)
  • 22. MODULES IN NG2 EASY TO GO RECIPE // bookstore/books-services/index.js 'use strict'; var BooksService = require(‘./BooksService’); var BooksDictionary = require(‘./BooksDictionary’); var BooksRemote = require(‘./BooksRemote’); exports.Book = Book; exports.BooksService = BooksService; exports.BooksDictionary = BooksDictionary; exports.BooksRemote = BooksRemote; var HTTP_PROVIDERS = require(‘angular2/http').HTTP_PROVIDERS; exports.BOOKS_SERVICES_PROVIDERS = [ HTTP_PROVIDERS, BooksService, BooksDictionary, BooksRemoteProvider, ]; Much better!
  • 23. MODULES IN NG2 EASY TO GO RECIPE WITH COMPONENTS // bookstore/books-services/index.js 'use strict'; exports.BookEditorComponent = require(‘./BookEditorComponent’); exports.BookViewerComponent = require(‘./BookViewerComponent’); exports.BooksListComponent = require(‘./BooksListComponent’); // it requires books providers var BOOKS_SERVICES_PROVIDERS = require(‘../books-services’).BOOKS_SERVICES_PROVIDERS; exports.BOOKS_COMPONENTS_PROVIDERS = [ BOOKS_SERVICES_PROVIDERS, ]; Nothing happens if the same “provider” is included twice.
  • 24. MODULES IN NG2 FINAL PROVIDERS Nothing happens if the same “provider” is included twice. BOOKSTORE_PROVIDERS === [ BOOKS_COMPONENTS_PROVIDERS, BOOKS_SERVICES_PROVIDERS, ];
  • 25. MODULES IN NG2 FINAL PROVIDERS Nothing happens if the same “provider” is included twice. BOOKSTORE_PROVIDERS === [ BOOKS_COMPONENTS_PROVIDERS, BOOKS_SERVICES_PROVIDERS, ]; BOOKS_COMPONENTS_PROVIDERS === [ BOOKS_COMPONENTS_PROVIDERS, ];
  • 26. MODULES IN NG2 FINAL PROVIDERS Nothing happens if the same “provider” is included twice. BOOKSTORE_PROVIDERS === [ [ BOOKS_SERVICES_PROVIDERS ], BOOKS_SERVICES_PROVIDERS, ]; BOOKS_COMPONENTS_PROVIDERS === [ BOOKS_COMPONENTS_PROVIDERS, ];
  • 27. MODULES IN NG2 FINAL PROVIDERS Nothing happens if the same “provider” is included twice. BOOKSTORE_PROVIDERS === [ [ BOOKS_SERVICES_PROVIDERS ], BOOKS_SERVICES_PROVIDERS, ]; BOOKS_SERVICES_PROVIDERS === [ HTTP_PROVIDERS, BooksService, BooksDictionary, BooksRemoteProvider, ];
  • 28. MODULES IN NG2 FINAL PROVIDERS Nothing happens if the same “provider” is included twice. BOOKSTORE_PROVIDERS === [ [ [ HTTP_PROVIDERS, BooksService, BooksDictionary, BooksRemoteProvider, ] ], [ HTTP_PROVIDERS, BooksService, BooksDictionary, BooksRemoteProvider, ], ]; BOOKS_SERVICES_PROVIDERS === [ HTTP_PROVIDERS, BooksService, BooksDictionary, BooksRemoteProvider, ];
  • 29. MODULES IN NG2 FINAL PROVIDERS Nothing happens if the same “provider” is included twice. BOOKSTORE_PROVIDERS === [ [ [ HTTP_PROVIDERS, BooksService, BooksDictionary, BooksRemoteProvider, ] ], [ HTTP_PROVIDERS, BooksService, BooksDictionary, BooksRemoteProvider, ], ]; HTTP_PROVIDERS === export const HTTP_PROVIDERS: any[] = [ // TODO(pascal): use factory type annotations once supported // issue: https://github.com/angular/angular/issues/3183 provide(Http, { useFactory: (xhrBackend, requestOptions) => new Http(xhrBackend, requestOptions), deps: [XHRBackend, RequestOptions] }), BrowserXhr, provide(RequestOptions, {useClass: BaseRequestOptions}), provide(ResponseOptions, {useClass: BaseResponseOptions}), XHRBackend ]; https://github.com/angular/angular/blob/ 2.0.0-beta.2/modules/angular2/http.ts#L154-L166
  • 30. MODULES IN NG2 FINAL PROVIDERS Nothing happens if the same “provider” is included twice. BOOKSTORE_PROVIDERS === [ [ [ […], BooksService, BooksDictionary, BooksRemoteProvider, ] ], [ […], BooksService, BooksDictionary, BooksRemoteProvider, ], ]; HTTP_PROVIDERS === export const HTTP_PROVIDERS: any[] = [ // TODO(pascal): use factory type annotations once supported // issue: https://github.com/angular/angular/issues/3183 provide(Http, { useFactory: (xhrBackend, requestOptions) => new Http(xhrBackend, requestOptions), deps: [XHRBackend, RequestOptions] }), BrowserXhr, provide(RequestOptions, {useClass: BaseRequestOptions}), provide(ResponseOptions, {useClass: BaseResponseOptions}), XHRBackend ]; https://github.com/angular/angular/blob/ 2.0.0-beta.2/modules/angular2/http.ts#L154-L166
  • 31. SO… WHAT IS A “MODULE” IN ANGULAR2? MODULES IN NG2
  • 32. ANGULAR2 MODULES MODULES NG2 • A module is a resource that exports: • Components • Classes • And an array of PROVIDERS
 (does not matter if we repeat things)
  • 33. MODULES IN NG2 “MODULE” EXAMPLE 1 // bookstore/index.js 'use strict'; var BOOKS_COMPONENTS_PROVIDERS = require(‘./books-components’).BOOKS_COMPONENTS_PROVIDERS; var BOOKS_SERVICES_PROVIDERS = require(‘./books-services’).BOOKS_SERVICES_PROVIDERS; exports.BookStoreComponent = require(‘./BookStoreComponent’); exports.BOOKSTORE_PROVIDERS = [ BOOKS_COMPONENTS_PROVIDERS, BOOKS_SERVICES_PROVIDERS, ];
  • 34. MODULES IN NG2 “MODULE” EXAMPLE 2 // bookstore/books-services/index.js 'use strict'; var BooksService = require(‘./BooksService’); var BooksDictionary = require(‘./BooksDictionary’); var BooksRemote = require(‘./BooksRemote’); exports.Book = Book; exports.BooksService = BooksService; exports.BooksDictionary = BooksDictionary; exports.BooksRemote = BooksRemote; var HTTP_PROVIDERS = require(‘angular2/http').HTTP_PROVIDERS; exports.BOOKS_SERVICES_PROVIDERS = [ HTTP_PROVIDERS, BooksService, BooksDictionary, BooksRemoteProvider, ];
  • 35. MODULES IN NG2 “MODULE” EXAMPLE 3 // bookstore/books-services/index.js 'use strict'; exports.BookEditorComponent = require(‘./BookEditorComponent’); exports.BookViewerComponent = require(‘./BookViewerComponent’); exports.BooksListComponent = require(‘./BooksListComponent’); // it requires books providers var BOOKS_SERVICES_PROVIDERS = require(‘../books-services’).BOOKS_SERVICES_PROVIDERS; exports.BOOKS_COMPONENTS_PROVIDERS = [ BOOKS_SERVICES_PROVIDERS, ];
  • 37. ANGULAR 2 HAS MULTIPLE INJECTORS MODULES IN NG2
  • 38. ANGULAR 2 HAS UP TO ONE INJECTOR PER COMPONENT MODULES IN NG2
  • 39. ANGULAR 2 HAS MULTIPLE INJECTORS MODULES NG2
  • 40. ANGULAR 2 HAS MULTIPLE INJECTORS MODULES NG2 • Angular2 has “almost” one injector per component • There is a tree of injectors, if something is not found in your level, it looks upper • You can nest Angular2 apps (YEAH!) • You can create providers for view models
 (aka no more global model for toggle the state of the search bar)
  • 41. MODULES IN NG2 ANGULAR 2 HAS MULTIPLE INJECTORS import {Component, Input, Output, EventEmitter} from 'angular2/core'; import {RestoreService} from './restore.service'; import {Hero} from ‘./hero'; @Component({ selector: 'hero-editor', providers: [RestoreService], template: … }) export class HeroEditorComponent { … } https://angular.io/docs/ts/latest/guide/hierarchical-dependency-injection.html
  • 42. DISCLAIMER • I’m not an expert in Angular2, just a beginner • I present it because I found very few example and nothing talking about “modules” • I want to share it so I can help others to save time • Tests were done on Angular v2.0.0-beta.1, current is v2.0.0-beta.2, but there is room for change