微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

详解Angularjs中的依赖注入

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

  • 全局变量进行引用;

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

rush:js;"> function SomeClass(greeter) { this.greeter = greeter; } SomeClass.prototype.greetName = function(name) { this.greeter.greet(name); };

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

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

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

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

rush:xhtml;">

而在内部,AngularJS的处理过程是下面这样的:

rush:js;"> // 使用注入器加载应用 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依赖注入有所帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐