AngularJS提供程序函数

AngularJS provider function

本文关键字:函数 程序 AngularJS      更新时间:2023-09-26
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]都只是提供者的包装。

有谁能帮助我理解这些问题吗?

  1. 为什么这些都是wrapperprovider ?让我们假设我有一个名为"Shane"的factory/service,为什么我要把它传递给provider来创建"Shane"对象?
  2. 为什么有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 {};
     };
 });

提供者是这样工作的:

  1. 首先,提供者可以相互交互,也可以像上面那样调用方法。
  2. 那么所有的$get方法都是从所有的提供者调用的。这个函数接受其他服务作为参数,所以在这里你可以与一些服务交互。
  3. $get方法的结果是你的服务的实际值,它可以被注入到其他服务,控制器等。

如果你的服务不需要所有这些功能,你可以跳过一些第一步,从下一步开始。如果你不需要使用提供者,使用factory。如果你甚至不需要使用服务,使用service(它像通常的js-constructor函数一样工作)或value,如果你的服务实际上是一个静态值并且不需要额外的准备。

查看$提供文档,了解所有这些注册函数的确切API。