AngularJs- $ Injector一个对象?

时间:2017-02-26 19:26:39

标签: javascript angularjs angularjs-scope angularjs-injector

我一直试图理解角度的核心。在编译角度之后,我无法理解事物的结构方式。我知道Injector包含/跟踪Angular Services,Factories,Providers等 - 几乎所有来自$ provider服务的方法。我知道注入器会抓取该值,并且在引用时它会获取调用provide方法实例时获得的单个值,因为$ get方法只检索方法值的单个实例 - 这就是为什么它们的原因是单身对象(我写的有点重复,但我想要清楚)。我遇到的一些问题是有全球注射器还是每个模块都有自己的注射器?注射器是对象吗?这就是我制作它的方式



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 ="和参考app,请不要浪费答案。我的服务有一个控制器属性,以显示它是一个能够拥有控制器的模块,仅此而已。如果你真的不知道,不要为了答案而猜,请只给我一个答案,如果您确定100%知道自己在谈论什么。

1 个答案:

答案 0 :(得分: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)

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