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 相关文章推荐
JavaScript 动态添加表格行 使用模板、标记
Oct 24 Javascript
自用js开发框架小成 学习js的朋友可以看看
Nov 16 Javascript
jQuery powerFloat万能浮动层下拉层插件使用介绍
Dec 27 Javascript
jquery设置text的值示例(设置文本框 DIV 表单值)
Jan 06 Javascript
jQuery遮罩层实现方法实例详解(附遮罩层插件)
Dec 08 Javascript
Winform客户端向web地址传参接收参数的方法
May 17 Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
Jul 12 Javascript
详谈js对url进行编码和解码(三种方式的区别)
Aug 16 Javascript
详解Ubuntu安装angular-cli遇到的坑
Sep 08 Javascript
JavaScript和TypeScript中的void的具体使用
Sep 12 Javascript
JS删除数组指定值常用方法详解
Jun 04 Javascript
vue单元格多列合并的实现
Nov 26 Vue.js
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
snoopy PHP版的网络客户端提供本地下载
2008/04/15 PHP
PHP以指定字段为索引返回数据库所取的数据数组
2013/06/30 PHP
php调用自己java程序的方法详解
2016/05/13 PHP
PHP计算近1年的所有月份
2017/03/13 PHP
CSS和Javascript简单复习资料
2010/06/29 Javascript
javascript实现多级联动下拉菜单的方法
2015/02/06 Javascript
jQuery实现判断滚动条到底部
2015/06/23 Javascript
jQuery仿京东商城楼梯式导航定位菜单
2016/07/25 Javascript
JavaScript 随机验证码的生成实例代码
2016/09/22 Javascript
bootstrap组件之按钮式下拉菜单小结
2017/01/19 Javascript
JS实现简单的天数计算器完整实例
2017/04/28 Javascript
jQuery实现购物车的总价计算和总价传值功能
2018/11/28 jQuery
JavaScript实现学生在线做题计时器功能
2018/12/05 Javascript
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
python列表操作实例
2015/01/14 Python
python3批量删除豆瓣分组下的好友的实现代码
2016/06/07 Python
numpy的文件存储.npy .npz 文件详解
2018/07/09 Python
使用python将图片按标签分入不同文件夹的方法
2018/12/08 Python
python模拟登陆,用session维持回话的实例
2018/12/27 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
2019/09/11 Python
Python如何使用Gitlab API实现批量的合并分支
2019/11/27 Python
Python猴子补丁Monkey Patch用法实例解析
2020/03/23 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
python 实现"神经衰弱"翻牌游戏
2020/11/09 Python
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
西班牙购买隐形眼镜、眼镜和太阳镜网站:Lentiamo.es
2020/06/11 全球购物
会计专业毕业生求职信分享
2014/01/03 职场文书
模范家庭事迹材料
2014/02/10 职场文书
中秋寄语大全
2014/04/11 职场文书
幼儿园中班区域活动总结
2014/07/09 职场文书
党员干部观看《周恩来四个昼夜》思想汇报
2014/09/10 职场文书
社会实践活动总结
2015/02/05 职场文书
淘宝文案策划岗位职责
2015/04/14 职场文书
商场广播稿范文
2015/08/19 职场文书
2016入党培训心得体会范文
2016/01/08 职场文书
OpenCV-Python直方图均衡化实现图像去雾
2021/06/07 Python