AngularJs-$Injector 对象?

AngularJs-$Injector an Object?

我一直在努力理解 angular 的核心。 angular 编译后,我无法理解事物的结构方式。我知道 Angular 服务、工厂、供应商等的注入器 contains/keeps 轨迹——几乎所有来自 $provider 服务的方法。我知道注入器随后会获取该值,并且在引用时会获取调用 provide 方法的实例时获得的单个值,因为 $get 方法仅检索方法值的单个实例——这就是为什么它们是单例对象(我写的有点重复,但我想说清楚)。我有几个问题是是否有全局注入器或每个模块是否有自己的注入器? Injector 是一个对象吗?这就是我想象的样子

var angular = {
 injector: [fn],
 bootstrap: [fn],
 $provider: {
  factory:[fn],
  service: [fn],
  constant: [fn]
 }

 modules: {
  $injector: {
   //Names of All Factories/Services/Etc.
  },
  myApp: {
   dependencies:[modules.myServices, modules.controllers, modules.filters]
  },
  myServices: {
   dependencies: [],
   controllers: {
    myTestCtrl: {
     //All controller logic
    }
   }
  },
  controllers: {
   //list of controllers and logic
  },
  filers: {
   //list of filers and logic.
  }

 }
}

创建此代码段的想法是我有一个用于过滤器、控制器和服务的模块。我通常以这种方式构建事物,因为控制器和服务脚本可能会变得很长(是的,我知道你可以做 "var app =" 和参考应用程序,请不要浪费答案。myService 有一个控制器 属性证明它是一个有控制器能力的模块,仅此而已。如果你真的不知道,不要为了答案而猜测,请只在你 100% 的情况下给我答案你肯定知道你在说什么。

元素的 angular.bootstrap(rootElement, moduleArray, config) method constructs an $injector object and a $rootScope object and stores references to them as properties of the jqLite 数据对象。

可以通过以下方式查看此对象:

console.log(angular.element(rootElement).data());

使用'ng'模块的典型应用程序结构如下:

rootElement.data()
- $scope (rootScope)
- $injector
  - $providerProvider   (provider cache)
  - $controllerProvider (controller cache)
  - $compileProvider    (directive cache)
  - $filterProvider     (filter cache)
  - $cacheProvider      (template cache)
  - $qProvider          (promise library)
  - $httpProvider       (XHR library)

缓存是各自提供者的私有变量,由各自的函数方法检索。