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
J.
Landin)发明的一个术语,指计算机语言中长的某种语法,这种语法对语言的意义并从未影响,但是再便宜程序员使用。通常来说使用语法糖会多程序的可读性,从而减少程序代码出错的机。

相关文章