AngularJS看重注入

文中内容基本上来自《AngularJS权威教程》

一个对象经常有两种办法得以得到对其借助的控制权:

  1. 在中间创立尊敬
  2. 经过全局变量进行引用
  3. 在须求的地点通过参数举办传递

凭借注入是通过第三种方法贯彻的。依赖注入是一种设计形式,它可以去除对看重关系的硬编码,从而得以在运行时改变甚至移除信赖关系。

在运行时修改依赖关系的力量对测试来讲是不行精良的,因为它同意大家创建一个切断的条件,从而在测试环境可以运用模拟的对象取代生产条件中的真实对象。从效果上来看,看重注入会优先自动寻找依赖关系,并将注入目标告知被依赖的资源,这样就可以在对象须求时马上将资源注入进来。在编辑看重于其余对象或库的零件时,大家须求描述组件之间的依靠关系。在运行期,注入器会创建信赖的实例,并负担将它传递给依赖的主顾。

基于以上原因,AngularJS使用$injector(注入器服务)来保管信赖关系的查询和实例化。事实上,$injector负责实例化AngularJS中负有组件,包罗利用的模块、指令和控制器等。

在运转时,任何模块启动时$injector都会负责实例化,并将其急需的兼具信赖传递进入。

上边是一个不难的言传身教

angular.module(‘myApp’, [])

.factory(‘greeter’, function() {

return {

greet: function(msg) {alert(msg); }

}

})

.controller(‘myController’,function($scope,
greeter) {

$scope.sayHello = function() {

greeter.greet(“hello”);

};

});

当AngularJS实例化这几个模块时,会招来greeter并大势所趋的把对它的引用传递进入。

<div ng-app=”myApp”>

<div
ng-controller=”myController”>

<button
ng-click=”sayHello()”>Hello</button>

</div>

</div>

揣测式注入讲明

只要没有显著宣示,AngularJS会假定参数名称就是凭借的名称。

显式注入表明

可以经过$inject属性来达成显式注入表明的功效,函数对象的$inject属性是一个数组,数组元素的序列是字符串,它们的值就是急需被注入的劳务的称号。那种申明形式参数的各种卓殊重大。

行内注入讲明

AngularJS提供的流入表明的最后一种办法,是可以随时使用的行内注入表明。那种格局实际是一个语法糖,它同前面提到的通过$inject属性进行注入申明的规律是千篇一律的,但允许大家在函数定义时从行内将参数传入。其它它可以免止在概念进程中运用临时变量。

在概念一个AngularJS的对象时,行内声明的法子允许大家一直传入一个参数数组而不是一个函数。数组的因素是字符串,它们代表的是可以被注入到对象中的重视的名字,最终一个参数就是凭借注入的对象函数对象自我。

例如:

angular.module(‘myApp’)

.controller(‘myController’,[‘$scope’,
‘greeter’, function($scope, greeter) {}]);

语法糖(Syntactic sugar)

是由英国电脑地理学家Peter·John·兰达(PeterJ.
Landin)发明的一个术语,指统计机语言中添加的某种语法,那种语法对语言的效劳并从未影响,不过更便民程序员使用。常常来说使用语法糖可以增添程序的可读性,从而裁减程序代码出错的空子。

相关文章