AngularJS应用开发思维3依赖注入

AngularJS应用开发思维3依赖注入
找不到的API

AngularJS提供了一些功能的封装,但是当你试图通过全局对象角访问这些功能,发现它是从那是以前遇到的完全不同的图书馆。

$ http

例如,在jQuery中,我们知道它的API是通过一个全局对象公开的:$,当您需要进行Ajax调用时,您可以使用ajax()。

AngularJS也暴露了一个全局对象:角,并封装了Ajax调用提供$ HTTP对象,但是,但是,当你试图用老经验看角。$ HTTP,它发现它的不一样。

仔细查找http文档,你找不到一点线索,你可以在哪里找到这个http。

依赖注入/迪村

事实上,AngularJS将所有的功能部件在注射的依赖性:
在依赖注入模式,所有组件都必须通过容器,导致在AngularJS,你必须通过中介得到一个组件的一个实例对象。
VaR注射器= angular.injector({ 'ng});
injector.invoke(功能($ HTTP){)
用http做某事
});
这是中介,AngularJS的依赖注入容器模型,称为喷油器。

在_,和例子,我们可以看到,我们有$ HTTP对象,它实际上是一个函数

喷油器/喷油器

喷油器是一个关键的AngularJS框架和应用的发展,这是实现二 / IoC容器。

AngularJS分功能分为不同类型的组件,每一个都具有一个共同指定的供应商/供应商。以下是几种常用的内置服务AngularJS:
不能直接称呼彼此之间AngularJS组件,组件必须通过喷油器可以调用另一个组件。这样做的好处是,组件之间的解耦,在整个生命周期的管理对象将注射器。

喷油器实现了两个重要功能:

集中存储所有供应商配方

这个公式实际上是:姓名+类构造函数。当AngularJS开始,公式的应用提供商在注射器注册第一。例如,在httpprovider美元类封装HTTP请求服务的组成部分,被称为http'registered美元在注射器中。

按需提供功能组件的实例。

其他组件,控制器作为一个用户,如果你需要使用HTTP功能,使用名称为http'to喷油器的要求,你可以得到的HTTP服务的实例。

尝试_,修改代码,编译服务美元的观点是什么

注册服务组件

从喷油器的点,一个组件是一个功能的提供者,因此称为供应商/服务提供商AngularJS,提供者是封装的Javascript类的形式(构造函数)。
服务名称通常使用一个字符串的识别,如$ http'representing HTTP调用服务,rootscope美元代表根域对象,compile'representing美元编译服务。

提供者类需要一个get函数(类工厂),而注入器可以通过调用函数获得服务组件的一个实例。

名称和类函数的组合称为公式,在注入器中保存一个集中的公式库,它用于按需创建不同的组件。

在_,和例子中,我们定义了一个简单的服务类,服务类是一个字符串:你好,世界!我们的服务use'ezhello'as喷油器中注册的名字,和这个例子是通过喷射器显示

把喷油器对象

使用AngularJS功能,你必须先把注射器。有两种方法可以得到喷射器。

创建一个新的注入器

你可以使用angular.injector()创建一个新的喷油器:

Angular.injector(模块,{ strictdi });收购创造了注射器

如果AngularJS框架已经启动,您可以使用DOM对象(器)方法已对喷油器的创建:

VaR元= angular.element(dom_element);

VaR注射器= element.injector();
通过调用API注入器

有两种方法来拟合API调用调用()和获取()。

()调用

使用调用()方法,以函数直接调用用户定义的,并取决于服务对象的函数的参数,这是AngularJS和推荐的惯例用法:
Angular.injector('ng{ })
调用(函数(HTTP){)
用http做某事
};获得()
还可以使用get()方法,这是指定名称服务的一个示例:
我angular.injector VaR $HTTP =({ 'ng}),($ http);
用我的http做某事
对_,对获得使用的例子()直接访问一个服务实例的方法,感觉!

注射方法与原理

有两种方法可以告知需要注入注入器服务对象:参数名称和依赖注入到数组中。

参数名称注

当AngularJS执行调用()函数,它将注入函数定义成一个字符串,检查它的参数表的正则表达式,并发现和向服务对象取决于。
/ / MyFunc声明这个函数依赖的http'service美元通过参数表
VaR MyFunc =功能($ HTTP){
用http做某事
};
Injector.invoke(myfunc); / / MyFunc的定义将被转换为字符串参数名称检查
一个问题是,当我们压缩Javascript代码时,HTTP将被更改为另一个名称,这将导致注入失败。

依靠阵列注入

AngularJS使用依赖数组来解决编码压缩混淆的问题。当时,invoke()被引入到一个数组。数组的最后一部分是要执行的函数。其他项目表示需要注入到函数中的服务的名称。

这样,注入到函数中的参数表的名称就无关紧要了。
/ / MyFunc依赖美元,美元http'and编译服务
VaR MyFunc = {$ http,编译,(P1,P2){函数
使用P1(http)、P2(编译)
} };
Injector.invoke(myfunc);
对_,方法的实例依靠阵列为ezhello服务实例,可以改变参数的名字,看看有没有影响

以上是本文的全部内容,希望能对您有所帮助,希望大家多多支持
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部