angular依赖注入
来源:互联网 发布:centos进入图形界面 编辑:程序博客网 时间:2024/06/05 07:19
http://www.cooklife.cn/detail/54c33ea2c93620284e964b56#View
使用过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){}])
0 0
- angular依赖注入:angular 依赖注入原理
- angular 实现依赖注入
- angular依赖注入
- Angular-依赖注入
- angular之依赖注入
- angular.js依赖注入
- Angular 依赖注入
- Angular依赖注入
- angular 依赖注入factory
- angular依赖注入
- Angular 2中的依赖注入
- 深入理解Angular依赖注入
- Angular 2中的依赖注入
- angular依赖注入和路由
- angular-如何实现注入依赖
- angular的依赖注入笔记
- Angular入门之依赖注入
- 【Angular】——依赖注入
- 我所理解的设计模式(C++实现)——迭代器模式(Iterator Pattern)
- Objective - C基础: 第四天 - 8.类别的加载过程
- the file “XXX” could not be opened because you don't have permission to view it
- CF GYM 100548 International Collegiate Routing Contest(2014ACM西安现场赛Problem I)
- 我所理解的设计模式(C++实现)——解释器模式(Interpreter Pattern)
- angular依赖注入
- 我所理解的设计模式(C++实现)——观察者模式(Observer Pattern)
- 高精度模板
- 我所理解的设计模式(C++实现)——模板方法模式(Template Method Pattern)
- HBase如何合理设置客户端Write Buffer
- 我所理解的设计模式(C++实现)——命令模式(Command Pattern)
- python学习——python文件
- 【呆子谈管理】:扬长,永远不要去补短
- 我所理解的设计模式(C++实现)——责任链模式(Chain Of Responsibility Pattern)