A presentation made for the AngularJS-IL meetup group that took place in oct 2014 at Google TLV Campus (http://www.meetup.com/AngularJS-IL/events/207559572/)
its an overview of how to use services in your app. this slideshow contain a link for a reference code on github.
(link in the last slide)
27. module.provider
Construction function for creating new instance of the service.
class Logger {
!
constructor() {
!
let logToConsole = false;
!
this.enableConsole = function (flag) {
logToConsole = flag;
};
!
this.$get = function() {
return {
debug: function (msg) {
if (logToConsole) {
console.log(msg)
}
}
}
}
}
}
28. module.provider
use it if you need to config your service before it’s instantiated
class Logger {
!
constructor() {
!
let logToConsole = false;
!
this.enableConsole = function (flag) {
logToConsole = flag;
};
!
this.$get = function() {
return {
debug: function (msg) {
if (logToConsole) {
console.log(msg)
}
}
}
}
}
}
angular.module('app', [])
!
.provider(‘logger’, Logger)
.config(function(loggerProvider){
loggerProvider.enableConsole(false);
})
!
.run(function(logger){
logger.debug(‘log message');
});
we need to call our service
with a ‘Provider’ suffix when
injecting into config function.
30. module.service
a constructor function that will be instantiated.
class Logger {
!
constructor() {
this.enableConsole = true;
}
!
debug(msg) {
if (this.enableConsole) {
console.log(msg)
}
}
}
31. module.service
use if your object does not need to be configured.
class Logger {
!
constructor() {
this.enableConsole = true;
}
!
debug(msg) {
if (this.enableConsole) {
console.log(msg)
}
}
}
angular.module('app', [])
!
.service(‘logger’, Logger)
!
.run(function(logger){
logger.debug(‘log message');
});
33. module.factory
Function for creating new instance of an Object.
function logger() {
!
return {
!
debug: function (msg) {
console.log(msg);
}
}
}
!
!
!
function logger() {
!
return function (flag) {
return function (msg) {
if (flag) console.log(msg);
}
}
}
!
!
34. module.factory
if you want to return something other than an Object instance
function logger() {
!
return {
debug: function (msg) {
console.log(msg);
}
}
}
!
!
function logger() {
!
return function (flag) {
return function (msg) {
if (flag) console.log(msg);
}
}
}
!
!
angular.module('app', [])
.factory(‘logger’, logger)
.run(function(logger){
logger.debug(‘log message');
});
angular.module('app', [])
!
.factory(‘logger’, logger)
.run(function(logger){
logger(true)(‘log message');
});
36. module.value
Service instance object. registered “as-is”.
function randomise() {
return Math.random() * 10;
}
!
var id = 52334556;
!
var product = {id: 52345, inStock: true};
!
!
class User {
!
constructor(name) {
this.firstName = name;
}
}
37. module.value
use it when you need a simple object or primitive.
function randomise() {
return Math.random() * 10;
}
!
!
!
!
!
!
!
!
class User {
!
constructor(name) {
this.firstName = name;
}
}
angular.module('app', [])
!
.value(‘randomise’, randomise)
!
.run(function(randomise){
var num = randomise()
});
angular.module('app', [])
!
.value(‘User’, User)
!
.run(function(user){
var joe = new User(‘joe’)
});
39. module.constant
Constant value. registered on the injector instanceCache.
var SERVERS = {
DEVELOPMENT : "http://localhost:8080/app",
DEBUGGING : "http://localhost:5789",
PRODUCTION : "http://application.com"
};
angular.module('app', [])
.constant('SERVERS', SERVERS)
!
.config(function (SERVERS) {
console.log(SERVERS.PRODUCTION);
})
!
.run(function (SERVERS) {
console.log(SERVERS.DEVELOPMENT);
});
because constants are
registered on the
injector instanceCache,
they can be injected
into the config function.
40. service and factory are shorthands for providers
class Logger {
!
constructor() {
!
let logToConsole = false;
!
this.enableConsole = function (flag) {
logToConsole = flag;
};
!
this.$get =
!
function () {
return {
debug: function (msg) {
if (logToConsole) {
console.log(msg)
}
}
}
}
}
}
Provider
Factory
Service
50. show me some code!
function logDecorator($delegate) {
!
$delegate.debug = function (msg) {
let time = new Date().getTime();
console.log(time + " : " + msg);
};
!
return $delegate
}
!
export default logDecorator;
decorator.js
angular.module('app', [])
!
.config(['$provide', function ($provide) {
$provide.decorator('$log', logDecorator)
}])
!
.run(['$log', function ($log){
$log.debug('logging with timestamp!');
}]);
51. Problem:!
I want to register new services at
runtime (lazy register)
52. Solution:!
get a reference to the $provide
service and use it outside the
config block
53. show me some code!
class Product {
!
constructor(type) {
this.productType = type;
}
!
getType () {
return this.productType;
}
}
!
class ProductFactory {
!
constructor($provider) {
!
let provider = $provider;
!
this.$get = function () {
return {
registerProduct : function (type) {
provider.value(type, new Product(type));
}
}
}
}
} product-factory.js
54. show me some code!
angular.module('app', [])
!
.provider('productFactory', ['$provide',ProductFactory])
!
.run(function($injector, productFactory) {
!
productFactory.registerProduct(‘chair');
!
var theChair = $injector.get(‘chair');
!
console.log(theChair.getType());
});
product-factory.js
55. grab the code
https://github.com/nirkaufman/angularjs-services