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 相关文章推荐
一步一步教你写一个jQuery的插件教程(Plugin)
Sep 03 Javascript
jQuery的DOM操作之删除节点示例
Jan 03 Javascript
js弹出确认是否删除对话框
Mar 27 Javascript
jQuery中replaceWith()方法用法实例
Dec 25 Javascript
jQuery 3.0十大新特性
Jul 06 Javascript
KnockoutJS 3.X API 第四章之数据控制流with绑定
Oct 10 Javascript
Vue开发过程中遇到的疑惑知识点总结
Jan 20 Javascript
浅谈webpack打包过程中因为图片的路径导致的问题
Feb 21 Javascript
微信小程序时间轴实现方法示例
Jan 14 Javascript
通过实践编写优雅的JavaScript代码
May 30 Javascript
javascript设计模式 ? 装饰模式原理与应用实例分析
Apr 14 Javascript
mapboxgl区划标签避让不遮盖实现的代码详解
Jul 01 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
比较简单的百度网盘文件直链PHP代码
2013/03/24 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
用js自动判断浏览器分辨率的代码
2007/01/28 Javascript
JavaScript 学习点滴记录
2009/04/24 Javascript
JQuery 表格操作(交替显示、拖动表格行、选择行等)
2009/07/29 Javascript
JavaScript 面向对象的之私有成员和公开成员
2010/05/04 Javascript
Area 区域实现post提交数据的js写法
2014/04/22 Javascript
js加减乘除丢失精度问题解决方法
2014/05/16 Javascript
ionic实现带字的toggle滑动组件
2016/08/27 Javascript
Jquery on绑定的事件 触发多次实例代码
2016/12/08 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
PHP自动加载autoload和命名空间的应用小结
2017/12/01 Javascript
使用nvm和nrm优化node.js工作流的方法
2019/01/17 Javascript
详解vue中axios的使用与封装
2019/03/20 Javascript
详解实现一个通用的“划词高亮”在线笔记功能
2019/04/23 Javascript
微信公众号开发之微信支付代码记录的实现
2019/10/16 Javascript
使用Python的Flask框架实现视频的流媒体传输
2015/03/31 Python
利用Django-environ如何区分不同环境
2018/08/26 Python
python得到电脑的开机时间方法
2018/10/15 Python
python itchat给指定联系人发消息的方法
2019/06/11 Python
django foreignkey(外键)的实现
2019/07/29 Python
python对输出的奇数偶数排序实例代码
2020/12/04 Python
css和css3弹性盒模型实现元素宽度(高度)自适应
2019/05/15 HTML / CSS
美国一家著名的儿童鞋制造商:Stride Rite
2017/01/02 全球购物
全球最大的游戏市场:G2A
2018/07/05 全球购物
军用级手机壳,专为冒险而建:Zizo Wireless
2019/08/07 全球购物
线程的基本概念、线程的基本状态以及状态之间的关系
2012/10/26 面试题
初中生自我鉴定
2014/02/04 职场文书
软件专业毕业生个人自我鉴定
2014/04/17 职场文书
党员承诺书格式
2014/05/21 职场文书
员工安全责任书范本
2014/07/24 职场文书
贷款委托书怎么写
2014/08/02 职场文书
2015中学政教处工作总结
2015/07/22 职场文书
2016高一新生军训心得体会
2016/01/11 职场文书
java固定大小队列的几种实现方式详解
2021/07/15 Java/Android