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判断一个URL链接是否有效的实现方法
Oct 08 Javascript
JQuery入门——用bind方法绑定事件处理函数应用介绍
Feb 05 Javascript
你的 mixin 真的兼容 ECMAScript 5 吗?
Apr 11 Javascript
js 中的switch表达式使用示例
Jun 03 Javascript
使用jQuery将多条数据插入模态框的实现代码
Oct 08 Javascript
Javascript在IE和Firefox浏览器常见兼容性问题总结
Aug 03 Javascript
Javascript之面向对象--封装
Dec 02 Javascript
JavaScript中重名的函数与对象示例详析
Sep 28 Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
Jul 04 Javascript
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
May 13 Javascript
JS实现点击发送验证码 xx秒后重新发送功能
Jul 30 Javascript
Vue 使用beforeEach实现登录状态检查功能
Oct 31 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
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
2013/06/29 PHP
php读取der格式证书乱码解决方法
2015/06/22 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
javascript 自定义事件初探
2009/08/21 Javascript
新老版本juqery获取radio对象的方法
2010/03/01 Javascript
javascript 图片上一张下一张链接效果代码
2010/03/12 Javascript
使用jquery实现div的tab切换实例代码
2013/05/27 Javascript
js控制web打印(局部打印)方法整理
2013/05/29 Javascript
Jquery遍历节点的方法小集
2014/01/22 Javascript
使用jquery.upload.js实现异步上传示例代码
2014/07/29 Javascript
一个jquery实现的不错的多行文字图片滚动效果
2014/09/28 Javascript
JQuery判断radio(单选框)是否选中和获取选中值方法总结
2015/04/15 Javascript
AngularJS控制器之间的通信方式详解
2016/11/03 Javascript
Jquery把获取到的input值转换成json
2017/05/15 jQuery
10 种最常见的 Javascript 错误(频率最高)
2018/02/08 Javascript
深入理解JavaScript的async/await
2018/08/05 Javascript
微信小程序 setData 对 data数据影响问题
2019/04/18 Javascript
vue自定义树状结构图的实现方法
2020/10/18 Javascript
小程序实现tab标签页
2020/11/16 Javascript
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
Python简单实现Base64编码和解码的方法
2017/04/29 Python
python SSH模块登录,远程机执行shell命令实例解析
2018/01/12 Python
python爬取哈尔滨天气信息
2018/07/14 Python
Python实现定时执行任务的三种方式简单示例
2019/03/30 Python
详解Python打包分发工具setuptools
2019/08/05 Python
python def 定义函数,调用函数方式
2020/06/02 Python
New Balance美国官网:运动鞋和健身服装
2017/04/11 全球购物
程序集与命名空间有什么不同
2014/07/25 面试题
2014年驻村干部工作总结
2014/11/17 职场文书
导游欢送词
2015/01/31 职场文书
汽车4S店前台接待岗位职责
2015/04/03 职场文书
2015年超市工作总结
2015/04/09 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书
大卫科波菲尔读书笔记
2015/06/30 职场文书
关爱留守儿童主题班会
2015/08/13 职场文书
2019年妇科护士的自我鉴定(3篇)
2019/09/26 职场文书