AngularJs Managing Service Dependencies详解


Posted in Javascript onSeptember 02, 2016

angular允许service将其他service声明为依赖,使用在自身实例化时使用的构造函数中。

为了声明依赖,我们需要在工厂方法声明中指定它们,并且在工厂方法中通过$inject属性(字符串标识数组)或者使用array notation。

通常$inject属性声明可以被丢弃(即https://3water.com/article/91815.htm中提到的隐式依赖注入,但这个是实验属性,在而且在压缩混淆后会失效,慎用!)。

使用array notation

function myModuleCfgFn ($provide) {
  $provide.factory(‘myService',[‘dep1','dep2',function(dep1,dep2){}]);
}

使用$inject属性   

function myModuleCfgFn($provide) {
   var myServiceFactory = function(dep1, dep2) {};
   myServiceFactory.$inject = ['dep1', 'dep2'];
   $provide.factory('myService', myServiceFactory);
 }

使用隐式DI(不兼容压缩混淆的代码)

function myModuleCfgFn($provide) {
$provide.factory('myService', function(dep1, dep2) {});
}

       下面有一个例子,里面有两个service,它们之间存在依赖关系,以及其他一些angular提供的service。

/**
 * batchLog service 允许消息在内存中形成队列,50秒flush一次。
 *
 * @param {*} message Message to be logged.
 */
 function batchLogModule($provide){
 $provide.factory('batchLog', ['$timeout', '$log', function($timeout, $log) {
 

var messageQueue = [];
 

function log() {
 


if (messageQueue.length) {
 



$log('batchLog messages: ', messageQueue);
 



messageQueue = [];
 


}
 


$timeout(log, 50000);
 

}
 

log(); 
 

return function(message) {
 


messageQueue.push(message);
 

}
 
}]);
 
/**
 
* routeTemplateMonitor监控每一个route的变化,每个比阿奴啊都会通过batchLog service记录下来
 
*/
 
$provide.factory('routeTemplateMonitor',
 

['$route', 'batchLog', '$rootScope',
 

function($route, batchLog, $rootScope) {
 


$rootScope.$on('$routeChangeSuccess', function() {
 



batchLog($route.current ? $route.current.template : null);
 


});
 
}]);
 }
 // 获得主service,运行应用(监听事件)

angular.injector([batchLogModule]).get('routeTemplateMonitor');

例子中需要注意的事项:

  1. batchLog service依赖angular内置的$timeout(http://docs.angularjs.org/api/ng.$timeout)与$log services(http://docs.angularjs.org/api/ng.$log),实现通过console.log批量log消息。
  2. routeTemplateMonitor service依赖内置的$route(http://docs.angularjs.org/api/ng.$route) service与我们自定义的batchLog service。
  3. 我们两个service都使用工厂方法签名以及array notation来注释inject,声明它们的依赖。array中的字符串标识的顺序与工厂方法签名(参数)中的顺序必须一致,这十分重要。除非在工厂方法参数中使用隐式依赖声明,否则,injector将根据array中字符串的顺序决定inject哪一个服务。

以上就是关于AngularJs Managing Service Dependencies 资料的整理,后续继续添加相关资料,谢谢大家对本站的支持!

Javascript 相关文章推荐
jsTree树控件(基于jQuery, 超强悍)[推荐]
Sep 01 Javascript
情人节专属 纯js脚本1k大小的3D玫瑰效果
Feb 11 Javascript
jquery获取div距离窗口和父级dv的距离示例
Oct 10 Javascript
js中的时间转换—毫秒转换成日期时间的示例代码
Jan 26 Javascript
jQuery中prevUntil()方法用法实例
Jan 08 Javascript
jQuery实现气球弹出框式的侧边导航菜单效果
Sep 22 Javascript
最全的Javascript编码规范(推荐)
Jun 22 Javascript
JS实现简单的tab切换选项卡效果
Sep 21 Javascript
js正则表达式验证密码强度【推荐】
Mar 03 Javascript
jQuery动态移除和添加背景图片的方法详解
Mar 07 Javascript
带你了解session和cookie作用原理区别和用法
Aug 14 Javascript
浅谈微信JS-SDK 微信分享接口开发(介绍版)
Aug 15 Javascript
AngularJs Injecting Services Into Controllers详解
Sep 02 #Javascript
AngularJs  Creating Services详解及示例代码
Sep 02 #Javascript
利用jQuery实现打字机字幕效果实例代码
Sep 02 #Javascript
AngularJs  Using $location详解及示例代码
Sep 02 #Javascript
基于JS实现类似支付宝支付密码输入框
Sep 02 #Javascript
JavaScript中Number对象的toFixed() 方法详解
Sep 02 #Javascript
Node.js实现兼容IE789的文件上传进度条
Sep 02 #Javascript
You might like
Javascript实现的分页函数
2006/12/22 Javascript
javascript Discuz代码中的msn聊天小功能
2008/05/25 Javascript
Extjs 几个方法的讨论
2010/01/28 Javascript
拖动布局之保存布局页面cookies篇
2010/10/29 Javascript
js 数据类型转换总结笔记
2011/01/17 Javascript
JS中Iframe之间传值的方法
2013/03/11 Javascript
jquery分页插件AmSetPager(自写)
2013/04/15 Javascript
Javascript脚本实现静态网页加密实例代码
2013/11/05 Javascript
js下拉选择框与输入框联动实现添加选中值到输入框的方法
2015/08/17 Javascript
JS简单实现浮动窗口效果示例
2016/09/07 Javascript
H5移动端适配 Flexible方案
2016/10/24 Javascript
EasyUI折叠表格层次显示detailview详解及实例
2016/12/28 Javascript
基于jQuery实现简单人工智能聊天室
2017/02/10 Javascript
详解AngularJS用Interceptors来统一处理HTTP请求和响应
2017/06/08 Javascript
angularjs实现柱状图动态加载的示例
2017/12/11 Javascript
axios发送post请求,提交图片类型表单数据方法
2018/03/16 Javascript
[04:02]2014DOTA2国际邀请赛 BBC每日综述中国战队将再度登顶
2014/07/21 DOTA
python教程之用py2exe将PY文件转成EXE文件
2014/06/12 Python
python执行子进程实现进程间通信的方法
2015/06/02 Python
python 生成器生成杨辉三角的方法(必看)
2017/04/10 Python
Python使用django搭建web开发环境
2017/06/09 Python
Python 比较两个数组的元素的异同方法
2017/08/17 Python
pygame游戏之旅 添加碰撞效果的方法
2018/11/20 Python
Python3.7 dataclass使用指南小结
2019/02/22 Python
python opencv根据颜色进行目标检测的方法示例
2020/01/15 Python
使用Tensorflow实现可视化中间层和卷积层
2020/01/24 Python
基于python实现把json数据转换成Excel表格
2020/05/07 Python
详解Python 循环嵌套
2020/07/09 Python
美国现代家具购物网站:LexMod
2019/01/09 全球购物
化石印度尼西亚在线商店:Fossil Indonesia
2019/03/11 全球购物
外贸主管求职简历的自我评价
2013/10/23 职场文书
高中生职业规划范文
2014/03/09 职场文书
大学生工作求职信
2014/06/23 职场文书
2014年学校禁毒工作总结
2014/12/23 职场文书
2015年学校德育工作总结
2015/04/22 职场文书
2016年端午节校园广播稿
2015/12/18 职场文书