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 相关文章推荐
jQuery1.6 正式版发布并提供下载
May 05 Javascript
javascript 获取HTML DOM父、子、临近节点
Jun 16 Javascript
JavaScript中的单引号和双引号报错的解决方法
Sep 01 Javascript
js事件监听器用法实例详解
Jun 01 Javascript
javascript控制台详解
Jun 25 Javascript
JS常用知识点整理
Jan 21 Javascript
jQuery基于ajax方式实现用户名存在性检查功能示例
Feb 10 Javascript
Vuejs 组件——props数据传递的实例代码
Mar 07 Javascript
详解基于mpvue的小程序markdown适配解决方案
May 08 Javascript
利用jquery和BootStrap实现动态滚动条效果
Dec 03 jQuery
JQuery复选框全选效果如何实现
May 08 jQuery
使用Vant完成DatetimePicker 日期的选择器操作
Nov 12 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
Apache设置虚拟WEB
2006/10/09 PHP
PHP 防注入函数(格式化数据)
2011/08/08 PHP
JavaScript实现删除电脑的关机键
2016/07/26 PHP
PHP基于curl后台远程登录正方教务系统的方法
2016/10/14 PHP
PHP实现阿里大鱼短信验证的实例代码
2017/07/10 PHP
网页里控制图片大小的相关代码
2006/06/25 Javascript
解决ExtJS在chrome或火狐中正常显示在ie中不显示的浏览器兼容问题
2013/01/11 Javascript
JQuery的read函数与js的onload不同方式实现
2013/03/18 Javascript
jQuery scrollFix滚动定位插件
2015/04/01 Javascript
新手快速学习JavaScript免费教程资源汇总
2015/06/25 Javascript
详解js中class的多种函数封装方法
2016/01/03 Javascript
jQuery的层级查找方式分析
2016/06/16 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
2016/07/07 Javascript
JavaScript中document.referrer的用法详解
2017/07/04 Javascript
ES6新特性:使用export和import实现模块化详解
2017/07/31 Javascript
微信小程序实现拖拽 image 触摸事件监听的实例
2017/08/17 Javascript
node.js多个异步过程中判断执行是否完成的解决方案
2017/12/10 Javascript
浅谈Vue SPA 首屏加载优化实践
2017/12/15 Javascript
基于node.js实现爬虫的讲解
2019/02/18 Javascript
layui监听单元格编辑前后交互的例子
2019/09/16 Javascript
pygame播放音乐的方法
2015/05/19 Python
详解设计模式中的工厂方法模式在Python程序中的运用
2016/03/02 Python
Python SQLite3数据库日期与时间常见函数用法分析
2017/08/14 Python
python opencv 图像拼接的实现方法
2019/06/27 Python
tensorflow 初始化未初始化的变量实例
2020/02/06 Python
Python集成开发工具Pycharm的安装和使用详解
2020/03/18 Python
利用python控制Autocad:pyautocad方式
2020/06/01 Python
Python制作数据预测集成工具(值得收藏)
2020/08/21 Python
如何用Matlab和Python读取Netcdf文件
2021/02/19 Python
AE美国鹰美国官方网站:American Eagle Outfitters
2016/08/22 全球购物
中国综合性网上购物商城:当当(网上卖书起家)
2016/11/16 全球购物
Jones Bootmaker官网:优质靴子和鞋子在线
2020/11/30 全球购物
高中生第一学年自我鉴定
2014/09/12 职场文书
生鲜超市—未来中国最具有潜力零售业态
2019/08/02 职场文书
node.js使用express-fileupload中间件实现文件上传
2021/07/16 Javascript
SQL使用复合索引实现数据库查询的优化
2022/05/25 SQL Server