factory service provider.
, angular :
function provider(name, provider_) {
if (isFunction(provider_) || isArray(provider_)) {
provider_ = providerInjector.instantiate(provider_);
}
if (!provider_.$get) {
throw Error('Provider ' + name + ' must define $get factory method.');
}
return providerCache[name + providerSuffix] = provider_;
}
(singleton), angular . $get . provider ( angular docs):
myApp.provider('unicornLauncher', function UnicornLauncherProvider() {
var useTinfoilShielding = false;
this.useTinfoilShielding = function(value) {
useTinfoilShielding = !!value;
};
this.$get = ["apiToken", function unicornLauncherFactory(apiToken) {
return new UnicornLauncher(apiToken, useTinfoilShielding);
}];
});
. module.config(), , // , singleton, $get.
myApp.config(["unicornLauncherProvider", function(unicornLauncherProvider) {
unicornLauncherProvider.useTinfoilShielding(true);
}]);
, , unicornLauncher, , $get , unicornLauncher , useTinfoilShielding = true .
, . -, singleton, , angular providerCache, . $get, .
: Singleton , , , .
, , . , , , , , .
factory. provider. , angular factory:
function factory(name, factoryFn) {
return provider(name, { $get: factoryFn });
}
provider, , , , $get - , provider.
service:
function service(name, constructor) {
return factory(name, ['$injector', function($injector) {
return $injector.instantiate(constructor);
}]);
}
factory, $get , angular, . , , , . , , , singleton-, .
, service - , angular , , factory - , , JavaScript.
, factory service.
.
factory, . , Member, :
var data = {first_name: "John", last_name: "Smith"}
var member = new Member(data);
factory:
.factory('Member', ['$log', 'DataService', '$http', 'Restangular',
function($log, DataService, $http, Restangular) {
return function(data) {
}
])
new factory ( ) , , , JS. , . $rootScope , . , , .