2019独角兽企业重金招聘Python工程师标准>>>

依赖注入(饭来伸手,衣来张口)DI,Dependency Injectio

AngularJs使用module“名字/对象”注册表来作为容器,实现DI。

依赖注解有三种方式,(数组标注、添加$inject属性、隐式声明)。

其中前两种在代码minify时不会被破坏,推荐使用第一种方式。

第二种方式可以自己手动改写(下面有例子),也可以使用工具ngAnnotate对隐式声明进行统一改写。

第三种方式,书写最为简单明了,但是不能对它直接进行minify,需要改写为前两种。

angular在执行某些方法(例如在服务的工厂方法、控制器构造方法)时会借助注入器(injector)。 因此我们需要在这些方法中加入标注来通知注入器哪些依赖需要被注入。可以通过以下三种方式注入服务:

- 通过数组标注在方法的参数中声明依赖(优先考虑)

- 定义在控制器构造方法的$inject属性中

- 通过方法参数名隐式的添加(有些注意事项)

1、数组标注(内联式注入)

优先考虑用该方式为组件定义依赖,例如:

someModule.controller('MyController', ['$scope', 'greeter', function($scope, greeter) {// ...
}]);

在代码中通过在第二个数组类型的参数中声明了'$scope','greeter'等依赖,数组最后一个元素为实际的构造方法,注意在构造方法的参数列表与其面的数组元素是一一对应的。

2、$inject属性(声明式或标注式注入)

我们还可以通过为控制器的构造方法添加$inject属性,并在该属性中添加依赖的方式定义依赖。

var MyController = function($scope, greeter) {// ...
}
MyController.$inject = ['$scope', 'greeter'];
someModule.controller('MyController', MyController);

注意$inject中依赖的顺序与构造方法中的参数需保持一致。

3、隐式声明依赖(推断性注入)

最简单的声明依赖的方式就是让设构造方法的参数与依赖的名字一样。

someModule.controller('MyController', function($scope, greeter) {// ...
});

注入器可以从函数的参数名中推断所依赖的服务。上面的函数中声明了$scope和greeter服务作为依赖。 这种方式可是代码更加简洁,但这种方式不能和JavaScript的代码混淆器一起使用。可以通过ng-annotate在minifying之前隐式的添加依赖。

转载于:https://my.oschina.net/u/2391658/blog/847687

angularjs的三种注入方式相关推荐

  1. spring三种注入方式

    设置Spring的作用域 或者使用枚举值设置 单例和多里使用场景 自动注入 @Primary 一个接口有多个实现被spring管理吗,在依赖注入式,spring会不知道注入哪个实现类就会抛出NoUni ...

  2. .NetCore中三种注入方式的思考

    .NetCore中三种注入方式的思考 原文:.NetCore中三种注入方式的思考 该篇内容由个人博客点击跳转同步更新!转载请注明出处! .NetCore彻底诠释了"万物皆可注入"这 ...

  3. spring入门之Spring 常用的三种注入方式

    Spring 常用的三种注入方式 Spring 通过 DI(依赖注入)实现 IOC(控制反转),常用的注入方式主要有三种:构造方法注入,set 方法注入,基于注解的注入. 一.通过构造方法注入 先简单 ...

  4. Spring 依赖注入的理解及三种注入方式

    Spring 依赖注入概念和三种注入方式(理解及应用) 什么是注入 要了解Spring的三种注入方式首先前提是得先了解一下什么是注入,相信很多人对这个概念都是模糊不清的,网上的解释是这样的: 依赖注入 ...

  5. Spring的三种注入方式(为什么推荐构造器注入?)

    Spring的三种注入方式 一.属性注入 @Resource和@Autowired的区别 为什么尽量使用 @Resource? 二.setter 注入 三.构造器注入 具体可以看看Spring官网 为 ...

  6. 扯一把 Spring 的三种注入方式,到底哪种注入方式最佳?

    循环依赖这个问题,按理说我们在日常的程序设计中应该避免,其实这个本来也是能够避免的.不过由于总总原因,我们可能还是会遇到一些循环依赖的问题,特别是在面试的过程中,面试考察循环依赖,主要是想考察候选人对 ...

  7. Spring 的三种注入方式?

    1. 实例的注入方式 首先来看看 Spring 中的实例该如何注入,总结起来,无非三种: 属性注入 set 方法注入 构造方法注入 我们分别来看下. 1.1 属性注入 属性注入是大家最为常见也是使用最 ...

  8. Spring 的三种注入方式,到底哪种注入方式最佳?

    1. 实例的注入方式 首先来看看 Spring 中的实例该如何注入,总结起来,无非三种: 属性注入 set 方法注入 构造方法注入 我们分别来看下. 1.1 属性注入 属性注入是大家最为常见也是使用最 ...

  9. Spring常用的三种注入方式

    Spring通过DI(依赖注入)实现IOC(控制反转),常用的注入方式主要有三种:构造方法注入,setter注入,基于注解的注入. 构造方法注入 先简单看一下测试项目的结构,用maven构建的,四个包 ...

最新文章

  1. 第七课 环境变量PATH,cp、mv及查看文档cat/more/less/head/tail命令
  2. android什么时候会产生ANR
  3. error: a label can only be part of a statement and a declaration is not a statement
  4. 【转】centos安装vim7.4(转)
  5. linux 连接wifi wpa2,RHEL等Linux系统使用wpa_supplicant以WPA-PSK/WPA2-PSK连接WIFI
  6. AllocateAndInitializeSid function
  7. 现代程序设计 作业5
  8. 论程序员如何规划职业路线?网友:从码农到工程师?
  9. [译]A Simple CSS Animation Tutorial
  10. 不联网的情况下,使用 electron-builder 快速打包全平台应用
  11. OpenGL Tutorial
  12. linux 设置防火墙ip网段,网络防御-防火墙设置IP网段规则
  13. MapStruct 详解
  14. 6. NMF方法及实例
  15. 杭州电子科技大学acm--2011
  16. http://gm100861.blog.51cto.com/1930562/954333
  17. 冯东阳:知名博主博客发软文广告,你怎么看?
  18. 同一个用户异地登陆踢人操作
  19. 常见网络聊天术语(中英文对照)
  20. 如何解决All flavors must now belong to a named flavor dimension.?

热门文章

  1. python羊车门_羊车门 python 作业
  2. python基本类型
  3. commit git idea 速度慢_关于Idea使用git时commit特别慢的问题及解决方法
  4. 达内python第二阶段月考_oracle练习题 达内第二次月考题
  5. python 生成pdf页面大小_使用具有自定义大小页面和最佳图像分辨率的Reportlab生成PDF...
  6. unity案例 mysql lua_通过Xlua实现unity热更新的一个小例子
  7. mysql 查询语句_MySQL查询语句之复杂查询
  8. Oracle/PLSQL CURSOR FOR Loop
  9. Spark案例:Scala版统计单词个数
  10. Python学习笔记:过滤N位数并绘制折线图