详解Angularjs中的依赖注入


Posted in Javascript onMarch 11, 2016

一个对象通常有三种方式可以获得对其依赖的控制权:

  • 在内部创建依赖;
  • 通过全局变量进行引用;
  • 在需要的地方通过参数进行传递

依赖注入是通过第三种方式实现的。比如:

function SomeClass(greeter) {
this.greeter = greeter;
}
SomeClass.prototype.greetName = function(name) {
this.greeter.greet(name);
};

SomeClass能够在运行时访问到内部的greeter,但它并不关心如何获得对greeter的引用。
为了获得对greeter实例的引用,SomeClass的创建者会负责构造其依赖关系并传递进去。

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

例如下面这段代码。这是一个简单的应用,声明了一个模块和一个控制器:

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的处理过程是下面这样的:

// 使用注入器加载应用
var injector = angular.injector(['ng', 'myApp']);
// 通过注入器加载$controller服务:var $controller = injector.get('$controller');
var scope = injector.get('$rootScope').$new();
// 加载控制器并传入一个作用域,同AngularJS在运行时做的一样
var MyController = $controller('MyController', {$scope: scope})

以上就是本文的全部内容,希望本文对大家学习Angularjs依赖注入有所帮助。

Javascript 相关文章推荐
使用prototype.js 的时候应该特别注意的几个问题.
Apr 12 Javascript
用javascript实现读取txt文档的脚本
Jul 20 Javascript
js自动下载文件到本地的实现代码
Apr 28 Javascript
JavaScript中把数字转换为字符串的程序代码
Jun 19 Javascript
Jquery中children与find之间的区别详细解析
Nov 29 Javascript
js浮点数精确计算(加、减、乘、除)
Dec 26 Javascript
JavaScript Math.floor方法(对数值向下取整)
Jan 09 Javascript
在父页面得到zTree已选中的节点的方法
Feb 12 Javascript
angularjs学习笔记之双向数据绑定
Sep 26 Javascript
深入浅析Node.js 事件循环
Dec 20 Javascript
JavaScript省市区三级联动菜单效果
Sep 21 Javascript
微信小程序城市定位的实现实例(获取当前所在国家城市信息)
May 17 Javascript
详解AngularJS过滤器的使用
Mar 11 #Javascript
javascript html5 canvas实现可拖动省份的中国地图
Mar 11 #Javascript
js仿百度登录页实现拖动窗口效果
Mar 11 #Javascript
基于jQuery日历插件制作日历
Mar 11 #Javascript
jQuery Html控件基本操作(日常收集整理)
Mar 11 #Javascript
JavaScript获取客户端IP的方法(新方法)
Mar 11 #Javascript
JavaScript高级程序设计(第三版)学习笔记6、7章
Mar 11 #Javascript
You might like
PHP数字格式化
2006/12/06 PHP
PHP中限制IP段访问、禁止IP提交表单的代码
2011/04/23 PHP
header中Content-Disposition的作用与使用方法
2012/06/13 PHP
php tpl模板引擎定义与使用示例
2019/08/09 PHP
php开发最强大的IDE编辑的phpstorm 2020.2配置Xdebug调试的详细教程
2020/08/17 PHP
javascript 二维数组的实现与应用
2010/03/16 Javascript
DB.ASP 用Javascript写ASP很灵活很好用很easy
2011/07/31 Javascript
Javascript数组的排序 sort()方法和reverse()方法
2012/06/04 Javascript
JQuery onload、ready概念介绍及使用方法
2013/04/27 Javascript
dreamweaver 8实现Jquery自动提示
2014/12/04 Javascript
JS实现的生成随机数的4个函数分享
2015/02/11 Javascript
javascript通过元素id和name直接取得元素的方法
2015/04/28 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
2016/04/14 Javascript
基于JavaScript实现在新的tab页打开url
2016/08/04 Javascript
BootStrap中的Fontawesome 图标
2017/05/25 Javascript
vue中eventbus被多次触发以及踩过的坑
2017/12/02 Javascript
node.js将MongoDB数据同步到MySQL的步骤
2017/12/10 Javascript
详解ECMAScript typeof用法
2018/07/25 Javascript
JS开发自己的类库实例分析
2019/08/28 Javascript
javascript将16进制的字符串转换为10进制整数hex
2020/03/05 Javascript
javascript利用canvas实现鼠标拖拽功能
2020/07/23 Javascript
[01:28:43]2014 DOTA2华西杯精英邀请赛5 24 DK VS CIS
2014/05/25 DOTA
[51:32]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
Python素数检测实例分析
2015/06/15 Python
Python对象中__del__方法起作用的条件详解
2018/11/01 Python
通过 Python 和 OpenCV 实现目标数量监控
2020/01/05 Python
Tensorflow 1.0之后模型文件、权重数值的读取方式
2020/02/12 Python
详解python中的闭包
2020/09/07 Python
python 装饰器的使用示例
2020/10/10 Python
美国Jeep配件购物网站:Morris 4×4 Center
2019/05/01 全球购物
FC-Moto丹麦:欧洲最大的摩托车服装和头盔商店之一
2019/08/20 全球购物
物理教学随笔感言
2014/02/22 职场文书
幼儿园师德师风学习材料
2014/05/29 职场文书
水污染治理工程专业求职信
2014/06/14 职场文书
先进党员事迹材料
2014/12/24 职场文书
python在package下继续嵌套一个package
2022/04/14 Python