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 相关文章推荐
JS的反射问题
Apr 07 Javascript
js浮动图片的动态效果
Jul 10 Javascript
JS匀速运动演示示例代码
Nov 26 Javascript
javascript拖拽应用实例
Mar 25 Javascript
jQuery实现的自适应焦点图效果完整实例
Aug 24 Javascript
Jquery表单验证失败后不提交的解决方法
Oct 18 Javascript
JavaScript创建对象的七种方式全面总结
Aug 21 Javascript
浅谈Angular2 模块懒加载的方法
Oct 04 Javascript
Vue.js 点击按钮显示/隐藏内容的实例代码
Feb 08 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
Feb 10 Javascript
Vue用v-for给src属性赋值的方法
Mar 03 Javascript
JavaScript常用数组操作方法,包含ES6方法
May 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
使用PHP实现密保卡功能实现代码<打包下载直接运行>
2011/10/09 PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
2014/11/12 PHP
php bootstrap实现简单登录
2016/03/08 PHP
PHP身份证校验码计算方法
2016/08/10 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
jQuery 学习入门篇附实例代码
2010/03/16 Javascript
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
2016/01/04 Javascript
jQuery插件扩展extend的简单实现原理
2016/06/24 Javascript
Three.js利用顶点绘制立方体的方法详解
2017/09/27 Javascript
Nodejs中crypto模块的安全知识讲解
2018/01/03 NodeJs
关于react-router/react-router-dom v4 history不能访问问题的解决
2018/01/08 Javascript
JavaScript实现获取select下拉框中第一个值的方法
2018/02/06 Javascript
vue中promise的使用及异步请求数据的方法
2018/11/08 Javascript
回顾Javascript React基础
2019/06/15 Javascript
javascript实现blob加密视频源地址的方法
2019/08/08 Javascript
Bootstrap实现前端登录页面带验证码功能完整示例
2020/03/26 Javascript
[01:19]DOTA2城市挑战赛报名开始 开启你的城市传奇
2018/03/23 DOTA
如何解决django配置settings时遇到Could not import settings 'conf.local'
2014/11/18 Python
Python运维自动化之nginx配置文件对比操作示例
2018/08/29 Python
对python pandas读取剪贴板内容的方法详解
2019/01/24 Python
英国HYPE双肩包官网:英国本土时尚潮牌
2018/09/26 全球购物
化石印度尼西亚在线商店:Fossil Indonesia
2019/03/11 全球购物
英国高级健康和美容产品零售商:Life and Looks
2019/08/01 全球购物
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类
2012/02/06 面试题
人事主管的岗位职责
2013/11/16 职场文书
大学生职业生涯规划书范文
2014/01/14 职场文书
迎八一活动主题
2014/01/31 职场文书
会计专业自我鉴定
2014/02/10 职场文书
《秋姑娘的信》教学反思
2014/02/28 职场文书
我的小天地教学反思
2014/04/30 职场文书
运动会报道稿300字
2014/10/02 职场文书
2014社区健康教育工作总结
2014/12/16 职场文书
据Python爬虫不靠谱预测可知今年双十一销售额将超过6000亿元
2021/11/11 Python
vue动态绑定style样式
2022/04/20 Vue.js
关于vue-router-link选择样式设置
2022/04/30 Vue.js