AngularJS提供程序函数
AngularJS provider function
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
或provider
?让我们假设我有一个名为"Shane
"的factory/service
,为什么我要把它传递给provider
来创建"Shane
"对象? - 为什么有
provider/service
呢?
工厂、服务和其他只是提供程序的有用包装。提供程序请求编写太多代码:
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-constructor函数一样工作)或value
,如果你的服务实际上是一个静态值并且不需要额外的准备。
查看$提供文档,了解所有这些注册函数的确切API。
相关文章:
- 如何远程检查JavaScript应用程序的函数调用堆栈
- 在同一个javascript事件处理程序中调用不同的函数
- 为什么这个函数调用会破坏程序并导致未定义的变量
- Backbone listenTo不将jquery函数作为处理程序进行激发
- Jquery事件处理程序仅适用于匿名函数
- 如何从另一个处理程序内部取消JavaScript事件处理程序函数的执行
- 如何向onClick事件处理程序传递一个接受参数的函数,并且仍然将该函数绑定到组件's”;这个“;上下文
- 如何将某个“;函数“;在Node.js的网络应用程序中
- 为什么有些jQuery程序员使用像$.get、$.getJSON和$.when这样的jQuery函数来代替$.ajax
- 构造函数中的事件处理程序与构造函数外的事件处理函数的行为不同
- 函数打开链接时不使用弹出窗口阻止程序
- 使用jqGrid列格式化程序函数使ng-click工作
- 向调用全局javascript函数的对象添加处理程序
- 将参数传递给函数,同时保留事件处理程序
- 直接在DOM事件处理程序中调用作用域函数的最短方法是什么
- Node Express Handlebars帮助程序未返回函数的结果
- 当调用JS函数具有alert()时,应用程序将被冻结
- 事件处理程序绑定到匿名函数与命名函数
- 如何根据JavaScript函数的结果用PHP编写数据库?(FB应用程序)
- Javascript函数程序