angular依赖注入的理解(转)

时间:2022-02-10 08:47:39

使用过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){

}])

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

  1. 30行代码让你理解angular依赖注入:angular 依赖注入原理

    依赖注入(Dependency Injection,简称DI)是像C#,java等典型的面向对象语言框架设计原则控制反转的一种典型的一种实现方式,angular把它引入到js中,介绍angular依赖 ...

  2. Angular依赖注入详解

    Angular算是将后端开发工程化引入前端的先驱之一,而Dependency injection依赖注入(后面简称为DI)又是Angular内部运作的核心功能,所以要深入理解Angular有必要先理解 ...

  3. [译] 关于 Angular 依赖注入你需要知道的

    如果你之前没有深入了解 Angular 依赖注入系统,那你现在可能认为 Angular 程序内的根注入器包含所有合并的服务提供商,每一个组件都有它自己的注入器,延迟加载模块有它自己的注入器. 但是,仅 ...

  4. angular 依赖注入原理

    依赖注入(Dependency Injection,简称DI)是像C#,java等典型的面向对象语言框架设计原则控制反转的一种典型的一种实现方式,angular把它引入到js中,介绍angular依赖 ...

  5. angular 依赖注入

    依赖注入    依赖注入(DI)是一个经典的设计模式, 主要是用来处理组件如何获得依赖的问题.关于DI,推荐阅读Martin Flower的文章(http://martinfowler.com/art ...

  6. 个人对于angularjs依赖注入的理解

    依赖注入(Dependency Injection,DI),作者认为本文中所有名词性的"依赖" 都可以理解为 "需要使用的资源". 对象或者函数只有以下3种获取 ...

  7. Spring核心思想:“控制反转”,也叫“依赖注入” 的理解

    @Service对应的是业务层Bean,例如: @Service("userService") public class UserServiceImpl implements Us ...

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

    开始好好学习java基础和思想~ 控制反转(IOC)是Spring框架的核心思想,用我自己的话说,就是你要做一件事,别自己可劲new了,你就说你要干啥,然后外包出去就好~ 依赖注入(DI) 在我浅薄的 ...

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

    一.说到依赖注入(控制反转),先要理解什么是依赖. Spring 把相互协作的关系称为依赖关系.假如 A组件调用了 B组件的方法,我们可称A组件依赖于 B组件. 二.什么是依赖注入. 在传统的程序设计 ...

随机推荐

  1. fillStyle线性渐变

    废话小说,沾待马 <!DOCTYPE HTML> <head> <meta charset = "utf-8"> <title>ca ...

  2. &lbrack;PL&sol;SQL&rsqb;使用PL&sol;SQL实现ORACLE的Excel格式导入导出

    注:教程所使用的PL/SQL Developer版本为10版本 1.oracle导出excel格式 第一步,在pl/sql窗口查询出你想要导出的数据. 第二步,选择你想导出的数据,然后右键" ...

  3. python--数据清洗

    1.数据错误: 错误类型– 脏数据或错误数据• 比如, Age = -2003– 数据不正确• '0' 代表真实的0,还是代表缺失– 数据不一致• 比如收入单位是万元,利润单位是元,或者一个单位是美元 ...

  4. coreDate 简化版

    建表: 自动生成: 代码: // // RootViewController.m // coreDate 简化版 #import "RootViewController.h" #i ...

  5. 快速搭建MongoDB分布式集群

    目录Outline 1. prerequisites 2. steps to follow3. configuring the cluster4. a little test to see 1. Pr ...

  6. 要做一款APP-解放双手

    对方打字或发语音,我可以选择看屏幕或者听. 我说话,能够转化为文字.不需要点击开始按钮的那种.

  7. 关于Ajax无刷新分页技术的一些研究 c&num;

    关于Ajax无刷新分页技术的一些研究 c# 小弟新手,求大神有更好的解决方案,指教下~ 以前做项目,用过GridView的刷新分页,也用过EasyUI的封装好的分页技术,最近在老项目的基础上加新功能, ...

  8. Java学习笔记20---内部类之对成员内部类的补充说明&lpar;一&rpar;

    上篇文章--笔记19简要介绍了成员内部类.局部内部类和匿名内部类,下面对成员内部类再补充一些内容. 主要有以下6点: 1.成员内部类不可以有静态成员,成员变量为static final时除外 2.外部 ...

  9. Java使用RSA加密解密签名及校验

    RSA加密解密类: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ...

  10. Mysql实现级联操作(级联更新、级联删除)

    一.首先创建两张表stu,sc create table stu( sid int UNSIGNED primary key auto_increment, name ) not null) TYPE ...