找不到的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服务实例,可以改变参数的名字,看看有没有
影响 以上是本文的全部内容,希望能对您有所帮助,希望大家多多
支持。