function provider(name, provider_) {
assertNotHasOwnProperty(name, 'service');
if (isFunction(provider_) || isArray(provider_)) {
provider_ = providerInjector.instantiate(provider_);
}
if (!provider_.$get) {
throw $injectorMinErr('pget', "Provider '{0}' must define $get factory method.", name);
}
return providerCache[name + providerSuffix] = provider_;
}
https://github.com/angular/angular.js/blob/master/src/auto/injector.js#L655-680
我实际上在查看injector.js的provider
函数,似乎所有服务[constant, value, factory, service and provider itself
]都只是提供程序的包装器。
任何人都可以帮助我理解这些问题:
wrapper
的{{1}}?让我的provider
命名为" factory/service
",为什么我会将其传递给Shane
以创建" {{ 1}}"对象provider
呢?答案 0 :(得分:2)
工厂,服务和其他人对提供商来说是一个非常有用的包装器。提供者请求编写如此多的代码:
angular.module('app', []).provider('myProvider', function(/*here you can inject another providers*/) {
// this function can be called by another providers
this.config = function() {};
this.$get = function(/*here you can inject services*/) {
// exprort your service value
return {};
};
});
这就是提供商的工作方式:
$get
方法。此函数接受其他服务作为参数,因此您可以在此处与某些服务进行交互。$get
方法的结果是您的服务的实际值,可以注入其他服务,控制器等。如果您的服务不需要所有这些功能,您可以跳过一些第一步并从任何进一步开始。如果您不需要与提供商合作,请使用factory
。如果您甚至不需要使用服务,请使用service
(通常用于js构造函数)或value
如果您的服务实际上是静态值且不需要额外准备。
查看$provide文档,了解所有这些注册函数的确切API。