博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Angular.js中的$injector服务
阅读量:5780 次
发布时间:2019-06-18

本文共 1500 字,大约阅读时间需要 5 分钟。

一 、angular中的依赖注入

  angular的一个很重要的特性就是依赖注入,可以分开理解这4个字。

  1.依赖:

    angular里面的依赖,有angular默认提供的,也有我们自己添加的。默认提供的比如$rootScope$http$injector等,我们也可以自己写factory函数来添加自己的依赖对象。

  2.注入:

    想要在当前上下文中使用已有的依赖,就必须通过$injector服务来获得依赖对象。

 

二、在一无所有的情况下获得$injector服务

 

  $injector本身也是依赖之一,怎么样一无所有的情况下得到$injector呢?angular框架提供了angular.injector()全局函数。

 

  这个函数接受modules数组作为它的参数,之后它就可以获得这些modules里面注册的各种服务了。特别是ng module,它是angular提供给我们的基础模块,$inject$rootscope$http等很多大家熟悉的服务都在ng module里面定义的。  

  看看下面代码:

        

  大家发现这里没有ng-app属性,也没有angular.bootstrap()函数,但是我们得到了angularjs里面的$log服务。

 

三、angular启动过程中的$injector

 

  在angular.bootstrap()函数里和$injector有关系的语句如下:

modules = modules || [];modules.unshift(['$provide', function($provide) {  $provide.value('$rootElement', element);}]);modules.unshift('ng');var injector = createInjector(modules, config.strictDi);injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector',       function bootstrapApply(scope, element, compile, injector) {        scope.$apply(function() {          element.data('$injector', injector);          compile(element)(scope);        });      }]

  这里的代码说明了angular启动过程中和我们前面的代码做了差不多的事情。

 

四、$injector和单元测试

 

  我们平时写angular程序的时候$injector用处可能不是很大,毕竟controller等函数都在暗中帮我们把注入做好了。但是在写单元测试的时候,就不得不用到$injector了。

!doctype html>  
 

  以上代码中module('myModule')可以看成是var aa = angular.injector(['ng','ngMock','myModule']);,而后面的injector(function(_myLog_)...可以看成aa.invoke(['myLog',function(myLog){...

 

 

 

 

 

 

转载于:https://www.cnblogs.com/chen8840/p/5141382.html

你可能感兴趣的文章
响应式网站对百度友好关键
查看>>
洛谷P2179 骑行川藏
查看>>
(十八)js控制台方法
查看>>
VB关键字总结
查看>>
android代码生成jar包并混淆
查看>>
一个不错的vue项目
查看>>
屏蔽指定IP访问网站
查看>>
python学习 第一天
查看>>
根据毫秒数计算出当前的“年/月/日/时/分/秒/星期”并不是件容易的事
查看>>
python的图形模块PIL小记
查看>>
shell变量子串
查看>>
iOS的主要框架介绍 (转载)
查看>>
react报错this.setState is not a function
查看>>
poj 1183
查看>>
从根本解决跨域(nginx部署解决方案)
查看>>
javascript实现的一个信息提示的小功能/
查看>>
Centos7.x:开机启动服务的配置和管理
查看>>
HTML5 浏览器返回按钮/手机返回按钮事件监听
查看>>
xss
查看>>
iOS:百度长语音识别具体的封装:识别、播放、进度刷新
查看>>