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 相关文章推荐
让textarea控件的滚动条怎是位与最下方
Apr 20 Javascript
javascript prototype,executing,context,closure
Dec 24 Javascript
csdn 批量接受好友邀请
Feb 19 Javascript
浅谈jQuery.easyui的datebox格式化时间
Jun 25 Javascript
JS面试题---关于算法台阶的问题
Jul 26 Javascript
详解angular ui-grid之过滤器设置
Jun 07 Javascript
手把手教你搭建ES6的开发运行环境
Jul 11 Javascript
js 奇葩技巧之隐藏代码
Aug 11 Javascript
JavaScript判断变量名是否存在数组中的实例
Dec 28 Javascript
详解javascript对数组和json数组的操作
Apr 15 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
Jun 24 Javascript
原生js基于canvas实现一个简单的前端截图工具代码实例
Sep 10 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
Zend Guard一些常见问题解答
2008/09/11 PHP
PHP读取txt文本文件并分页显示的方法
2015/03/11 PHP
CI框架简单邮件发送类实例
2016/05/18 PHP
laravel框架关于搜索功能的实现
2018/03/15 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
2019/03/21 PHP
jquery 选择器部分整理
2009/10/28 Javascript
基于jQuery的试卷自动排版系统实现代码
2011/01/06 Javascript
jquery调用wcf并展示出数据的方法
2011/07/07 Javascript
jquery限制输入字数,并提示剩余字数实现代码
2012/12/24 Javascript
最佳的JavaScript错误处理实践
2016/07/16 Javascript
JS Select下拉框(支持输入模糊查询)
2017/02/04 Javascript
微信小程序组件 marquee实例详解
2017/06/23 Javascript
Jquery和CSS实现选择框重置按钮功能
2018/11/08 jQuery
微信小程序使用canvas自适应屏幕画海报并保存图片功能
2019/07/25 Javascript
JS基础之逻辑结构与循环操作示例
2020/01/19 Javascript
Vue组件模板的几种书写形式(3种)
2020/02/19 Javascript
解决Vue项目中tff报错的问题
2020/10/21 Javascript
[02:12]探秘2016国际邀请赛中国区预选赛选手房间
2016/06/25 DOTA
50行代码实现贪吃蛇(具体思路及代码)
2013/04/27 Python
python字典多条件排序方法实例
2014/06/30 Python
python GUI实例学习
2017/11/21 Python
python中format()函数的简单使用教程
2018/03/14 Python
Python list与NumPy array 区分详解
2019/11/06 Python
利用PyTorch实现VGG16教程
2020/06/24 Python
解决Keras中CNN输入维度报错问题
2020/06/29 Python
Python下划线5种含义代码实例解析
2020/07/10 Python
自荐信格式范文
2013/10/07 职场文书
外语系毕业生自荐信范文
2013/12/16 职场文书
服装促销活动方案
2014/02/23 职场文书
公司节能减排方案
2014/05/16 职场文书
2014年优秀党员材料
2014/12/18 职场文书
初二学生评语大全
2014/12/26 职场文书
2015年小学师德师风建设工作总结
2015/10/23 职场文书
pytorch 中nn.Dropout的使用说明
2021/05/20 Python
Vue CLI中模式与环境变量的深入详解
2021/05/30 Vue.js
Python Pandas数据分析之iloc和loc的用法详解
2021/11/11 Python