angular依赖注入的理解(转)

使用过java进行开发的人肯定知道大名鼎鼎的spring框架,对于spring的IOC肯定也有所了解,通过配置文件定义好bean之后,如果需要使用这些bean,不需要自己去实例化,而是跟spring这个大容器去要就行了。我们的angular框架也实现了这种机制。

思考一下,如果对象需要获得其对依赖的控制权,有哪几种方式?

1.在对象内部自行创建依赖的实例

2.将依赖定义为全局的,然后通过全局变量去引用

3.在需要的地方通过参数去传递

依赖注入就是通过第三种方式去实现的,通过依赖注入可以出去对依赖关系的硬编码。

我们先来看看一个实例,angular中如何使用依赖注入。

angular.module(‘test‘,[]).controller(‘TestController‘, function($scope, $location){

})

我们给模块注册一个控制器,控制器接受两个参数$scope以及$location,这两个参数是angular内置的服务,那么控制器被调用的时候这些服务是如何由谁注入进去的呢?

在angular通过$injector服务来管理依赖关系的查询和实例化。

推断式注入声明

在上面的例子中,没有任何声明,angularjs认为参数的名称就是依赖的名称,angular根据参数的名称在已注册的服务中进行查找,然后通过$injector将这些参数注入进实例对象

injector.invoke(function($scope, $location){})

因为此处是根据参数的名称进行注入的,因此参数的顺序没有关系。

但是在生产环境中,为了缩短网页的加载的时间,我们通常会将js文件进行压缩,参数的名字会被别名替代,这个时候根据参数名称就行注入就行不通了。

显示注入声明

通过显示的方法来明确定义函数的依赖关系,即使源代码被压缩了,也能够正常运行。通过$inject属性来显示的进行注入。函数对象的$inject属性是一个数组,其元素是字符串,其值为需要注入的服务名称。

angular.module(‘test‘,[]).controller(‘TestController‘, TestController);

function TestController($scope, $location){

}
TestController.$injector = [‘$scope‘,‘$location‘]

行内注入声明

行内的注入声明其实和显示注入声明效果一样,只是在函数定义的时候从行内将参数传入,可以避免在使用过程中使用临时变量。

angular.module(‘test‘,[]).controller(‘TestController‘, [‘$scope‘, ‘$location‘,function($scope, $location){

}])
时间: 2024-10-13 12:35:43

angular依赖注入的理解(转)的相关文章

控制反转和依赖注入的理解(通俗易懂)

转自:    https://blog.csdn.net/sinat_21843047/article/details/80297951 https://jinnianshilongnian.iteye.com/blog/1413846 学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈

java 控制反转和依赖注入的理解

开始好好学习java基础和思想~ 控制反转(IOC)是Spring框架的核心思想,用我自己的话说,就是你要做一件事,别自己可劲new了,你就说你要干啥,然后外包出去就好~ 依赖注入(DI) 在我浅薄的想法中,就是通过接口的引用和构造方法的表达,将一些事情整好了反过来传给需要用到的地方~ 这样做得好处:做到了单一职责,并且提高了复用性,解耦了之后,任你如何实现,使用接口的引用调用的方法,永远不需要改变 举一个栗子: 写个接口,说咱们购物去~ public interface IShopping {

angular 依赖注入

依赖注入    依赖注入(DI)是一个经典的设计模式, 主要是用来处理组件如何获得依赖的问题.关于DI,推荐阅读Martin Flower的文章(http://martinfowler.com/articles/injection.html ). Angular注入器会负责创建angular组件,解决组件之间的依赖以及依赖注入等职责. 使用依赖注入   依赖注入在angular应用代码中使用很频繁.我们可以在定义组件或者在模块的run和config块中使用. - 可在angular组件(控制器.

对spring控制反转以及依赖注入的理解

一.说到依赖注入(控制反转),先要理解什么是依赖. Spring 把相互协作的关系称为依赖关系.假如 A 组件调用了 B 组件的方法,我们可称A 组件依赖于 B 组件. 二.什么是依赖注入. 在传统的程序设计过程中,通常由调用者来创建被调用者的实例. 在依赖注入的模式下,创建被调用者的工作不再由调用者来完成,因此称为控制反转:创建被调用者实例的工作通常由Spring 容器来完成,然后注入给调用者,因此也称为依赖注入. 自己理解:即一句话,由spring容器来控制组件A的调用的具体对象B.组件A依

Spring 依赖注入的理解

首先: 1.依赖注入就是一种在一个需要使用它的类中定义一个接口,该类中不管这个接口是怎么实现的,只是执行这个方法 2.依赖注入可以让该类实现通用 代码: 1.定义一个饮料接口 1 package cn.lonecloud.model; 2 /** 3 * 创建一个食物接口 4 * @Title: IDrink.java 5 * @Package cn.lonecloud 6 * @Description: 7 * @author lonecloud 8 * @date 2016年10月4日 上午

Spring的依赖注入怎么理解

先看一段代码假设你编写了两个类,一个是人(Person),一个是手机(Mobile). 人有时候需要用手机打电话,需要用到手机的dialUp方法. 传统的写法是这样: Java code public class Person{ public boolean makeCall(long number){ Mobile mobile=new Mobile(); return mobile.dialUp(number); }} 也就是说,类Person的makeCall方法对Mobile类具有依赖,

java框架spring的依赖注入初步理解

java框架的spring作为整个工程的统领者,可以有效地管理各层的对象,有效的协调运行,当系统西药重构时,可以极大地减少改写代码的量. 依赖注入和控制反转属于同一个概念,在java中当某个类(调用者)需要另一个类(被调用者)的协助时,在以往的程序设计理念中,通常由调用者类创建一个被调用者类的实例(new一个被调用者类),这种new一个对象的方法通常会在java空间中开创一个空间,对java项目整体运行效率会有一定的影响,而且是比较粗鲁的方式.但在spring框架里,创建调用类的工作不再由调用者

Angular——依赖注入

基本介绍 1.AngularJS采用模块化的方式组织代码,将一些通用逻辑封装成一个对象或函数,实现最大程度的复用,这导致了使用者和被使用者之间存在依赖关系. 2.所谓依赖注入是指在运行时自动查找依赖关系,然后将查找到依赖传递给使用者的一种机制. 3.常见的AngularJS内置服务有$http.$location.$timeout.$rootScope等 基本使用 1.推断式注入 没有明确声明依赖,AngularJS会将函数参数名称当成是依赖的名称.这种方式会带来一个问题,当代码经过压缩后函数的

2.Angular框架-$watch,创建控制器的方式,依赖注入原理,ng-repeat,ng-class

1.1. 在Angular中使用"jQuery" 语法:angular.element Angular中操作的功能称为:jqLite(轻量级jQuery) 1.1.1. 示例 // 获取 jqLite 对象 var $ = angular.element; $(document).ready(function() { }); 1.1.2. 注意点 1 jqLite 中只实现了jQuery的部分功能 2 jqLite中选择器只能是DOM对象 3 尽量使用ng中提供的功能 1.2. Ang