博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Angularjs之依赖注入
阅读量:5884 次
发布时间:2019-06-19

本文共 1096 字,大约阅读时间需要 3 分钟。

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

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

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

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并自然而然地把对它的引用传递进去:

而在内部,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})

 

转载于:https://www.cnblogs.com/hutuzhu/p/4360215.html

你可能感兴趣的文章
更新软件
查看>>
Windows10锁屏壁纸提取
查看>>
SSM框架——使用MyBatis Generator自动创建代码
查看>>
Logstash之Logstash inputs(file和redis插件)、Logstash outputs(elasticsearch 和redis插件)和Filter plugins...
查看>>
利用struts2<s:token>标签防止用户重复提交
查看>>
局域网基本原理与广域网基本原理
查看>>
java数据库操作:JDBC的操作
查看>>
Codeforces Round #247 (Div. 2) D. Random Task
查看>>
解决Ubuntu下博通网卡驱动问题
查看>>
怎样给ExecutorService异步计算设置超时
查看>>
C#高级编程五十七天----位数组
查看>>
二叉树宽度的计算
查看>>
Android 修改圆形progressBar颜色
查看>>
solr .Net端(SolrNet)
查看>>
HttpServletRequest对象(一) ***
查看>>
JS实现异步编程的4种方法
查看>>
Spring4.x 基础
查看>>
cpu个数、核数、线程数、Java多线程关系的理解
查看>>
C#使用Xamarin开发可移植移动应用(3.Xamarin.Views控件)附源码
查看>>
fastjson如何判断JSONObject和JSONArray
查看>>