详解Angularjs中的依赖注入

 更新时间:2016年03月11日 14:04:40   作者:彼岸花在开  
这篇文章主要为大家详细介绍了Angularjs中的依赖注入,AngularJS提供了一个至高无上的依赖注入机制,感兴趣的小伙伴们可以参考一下

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

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

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

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依赖注入有所帮助。

相关文章

  • angular.element方法汇总

    angular.element方法汇总

    本文主要给大家汇总了一下angular.element的方法,十分的详细,这里推荐给大家 参考下。
    2015-01-01
  • 利用Angular2的Observables实现交互控制的方法

    利用Angular2的Observables实现交互控制的方法

    这篇文章主要介绍了利用Angular2的Observables实现交互控制的方法,我们主要针对一些在跟服务器端交互的时候遇到的问题,来看看Observable给我们带来的特性。感兴趣的可以了解一下
    2018-12-12
  • Angular如何引入第三方库的方法详解

    Angular如何引入第三方库的方法详解

    本篇文章主要介绍了Angular如何引入第三方库的方法详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • angular.JS实现网页禁用调试、复制和剪切

    angular.JS实现网页禁用调试、复制和剪切

    这篇文章主要给大家介绍了angular.JS实现网页禁用调试、复制和剪切的相关资料,文中介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • 浅谈对Angular中的生命周期钩子的理解

    浅谈对Angular中的生命周期钩子的理解

    本篇文章主要介绍了Angular中的生命周期钩子的理解,详细的介绍了生命周期钩子和主要的生命周期钩子,有兴趣的可以了解一下
    2017-07-07
  • 关于angularJs清除浏览器缓存的方法

    关于angularJs清除浏览器缓存的方法

    这篇文章主要介绍了关于angularJs清除浏览器缓存的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Angular入口组件(entry component)与声明式组件的区别详解

    Angular入口组件(entry component)与声明式组件的区别详解

    这篇文章主要给大家介绍了关于Angular入口组件(entry component)与声明式组件的区别的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-04-04
  • AngularJs解决跨域问题案例详解(简单方法)

    AngularJs解决跨域问题案例详解(简单方法)

    本文通过一个案例给大家介绍angularJs解决跨域问题,非常具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-05-05
  • angular.js分页代码的实例

    angular.js分页代码的实例

    本文用实例详细给大家展示了angular.js分页代码,代码很详细,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • 详解@angular/cli 改变默认启动端口两种方式

    详解@angular/cli 改变默认启动端口两种方式

    这篇文章主要介绍了详解@angular/cli 改变默认启动端口两种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11

最新评论