2017-02-26 177 views
0

我一直在试图理解角的核心。在编译角度之后,我无法理解事物的结构。我知道注射器包含/保持跟踪角服务,工厂,提供者等 - 几乎所有来自$提供者服务的方法。我知道这个值是由注入器抓取的,当它被引用时,它抓住了当提供方法的实例被调用时获得的单个值,因为$ get方法只检索方法值的单个实例 - 他们之所以会这样是单身物件(我写的有点重复,但我想清楚)。我有几个问题是有全球注射器还是每个模块都有自己的注射器?注射器是一个物体吗?这是我怎么想象没有它

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

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

 
\t } 
 
}

这个片段是与我有过滤器,控制器和服务模块的想法产生。我通常以这种方式构造事物,因为控制器和服务脚本可能会变得非常冗长(是的,我知道你可以做“var app =”和参考应用程序,请不要浪费答案。myService具有控制器属性以显示它是一个能够拥有一个控制器的模块,如果你真的不知道,不要为了答案而猜测,如果你知道100%,请给我一个答案。 。你在谈论

+0

$ injector是由'angular.bootstrap'创建的更多信息,请参阅[AngularJS angular.bootstrap API参考](https://docs.angularjs.org/api/ng/function/angular.bootstrap)和[ AngularJS Bootstrap Guide](https://docs.angularjs.org/guide/bootstrap)。 – georgeawg

+0

@georgeawg那不回答我的问题。我已阅读文档。我正在寻找清晰度角度的结构 – Scott

回答

1

angular.bootstrap(rootElement, moduleArray, config)方法构造了一个$injector对象和$rootScope对象并将对它们的引用作为该元素的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) 

的高速缓存是其各自提供者私有变量和由它们各自的功能的方法进行检索。

+0

这就是我正在谈论的乔治!我会将其标记为正确的答案。 – Scott