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 相关文章推荐
IE JS编程需注意的内存释放问题
Jun 23 Javascript
Extjs学习笔记之三 extjs form更多的表单项
Jan 07 Javascript
对比分析json及XML
Nov 28 Javascript
理解javascript回调函数
Dec 28 Javascript
深入剖析JavaScript编程中的对象概念
Oct 21 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
May 12 Javascript
Javascript将数值转换为金额格式(分隔千分位和自动增加小数点)
Jun 22 Javascript
详解React-Native全球化多语言切换工具库react-native-i18n
Nov 03 Javascript
在 React、Vue项目中使用SVG的方法
Feb 09 Javascript
微信小程序访问豆瓣电影api的实现方法
Mar 31 Javascript
layui使用数据表格实现购物车功能
Jul 26 Javascript
layerui代码控制tab选项卡,添加,关闭的实例
Sep 04 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
火影忍者:这才是千手柱间和扉间的真正死因,角都就比较搞笑了!
2020/03/10 日漫
虫族 Zerg 魔法科技
2020/03/14 星际争霸
编写Smarty插件在模板中直接加载数据的详细介绍
2013/06/26 PHP
PHP 正则表达式常用函数
2014/08/17 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
2016/05/18 PHP
php微信公众平台交互与接口详解
2016/11/28 PHP
脚本吧 - 幻宇工作室用到js,超强推荐base.js
2006/12/23 Javascript
javascript 操作文件 实现方法小结
2009/07/02 Javascript
对JavaScript中this指针的新理解分享
2015/01/31 Javascript
jquery制作 随机弹跳的小球特效
2015/02/01 Javascript
AngularJS ng-repeat数组有重复值的解决方法
2016/10/23 Javascript
d3.js实现简单的网络拓扑图实例代码
2016/11/06 Javascript
jstree的简单实例
2016/12/01 Javascript
jquery select插件异步实时搜索实例代码
2017/10/20 jQuery
element-ui 中的table的列隐藏问题解决
2018/08/24 Javascript
vue.js实现带日期星期的数字时钟功能示例
2018/08/28 Javascript
JS判断用户用的哪个浏览器实例详解
2018/10/09 Javascript
JS判断两个数组或对象是否相同的方法示例
2019/02/28 Javascript
浅析vue-router实现原理及两种模式
2020/02/11 Javascript
python分析apache访问日志脚本分享
2015/02/26 Python
Python编程中装饰器的使用示例解析
2016/06/20 Python
Python编程实现正则删除命令功能
2017/08/30 Python
python numpy 按行归一化的实例
2019/01/21 Python
python3.x实现base64加密和解密
2019/03/28 Python
详解Django定时任务模块设计与实践
2019/07/24 Python
详解使用Python下载文件的几种方法
2019/10/13 Python
Python pandas 列转行操作详解(类似hive中explode方法)
2020/05/18 Python
Python unittest基本使用方法代码实例
2020/06/29 Python
Python编写memcached启动脚本代码实例
2020/08/14 Python
详解CSS透明opacity和IE各版本透明度滤镜filter的最准确用法
2016/12/20 HTML / CSS
新加坡最早生产电动滑板车的制造商之一:FunsToTheFore
2020/09/08 全球购物
《三亚落日》教学反思
2014/04/26 职场文书
赞美老师的演讲稿
2014/05/22 职场文书
报考公务员诚信承诺书
2014/08/29 职场文书
保密工作整改报告
2014/11/06 职场文书
MySQL 使用事件(Events)完成计划任务
2021/05/24 MySQL