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 相关文章推荐
OfflineSave离线保存代码再次发布使用说明
May 23 Javascript
List the Codec Files on a Computer
Jun 11 Javascript
浅析js封装和作用域
Jul 09 Javascript
jquery slibings选取同级其他元素的实现代码
Nov 15 Javascript
js插件方式打开pdf文件(浏览器pdf插件分享)
Dec 20 Javascript
JS中捕获console.log()输出的方法
Apr 16 Javascript
javascript cookie的简单应用
Feb 24 Javascript
js仿手机页面文件下拉刷新效果
Oct 14 Javascript
JS实现自动轮播图效果(自适应屏幕宽度+手机触屏滑动)
Jun 19 Javascript
JS中Object对象的原型概念基础
Jan 29 Javascript
javascript实现下拉菜单效果
Feb 09 Javascript
vue 把二维或多维数组转一维数组
Apr 24 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
simplehtmldom Doc api帮助文档
2012/03/26 PHP
php实现简单的MVC框架实例
2015/09/23 PHP
php实现的XML操作(读取)封装类完整实例
2017/02/23 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
laradock环境docker-compose操作详解
2019/07/29 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
2019/10/16 PHP
javascript操作cookie_获取与修改代码
2009/05/21 Javascript
自定义右键属性覆盖浏览器默认右键行为实现代码
2013/02/02 Javascript
js格式化金额可选是否带千分位以及保留精度
2014/01/28 Javascript
jQuery标签编辑插件Tagit使用指南
2015/04/21 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
2016/02/19 Javascript
BootStrap3学习笔记(一)之网格系统
2016/05/20 Javascript
jq checkbox 的全选并ajax传参的实例
2017/04/01 Javascript
AngularJS $http post 传递参数数据的方法
2018/10/09 Javascript
如何安装控制器JavaScript生成插件详解
2018/10/21 Javascript
JS实现从对象获取对象中单个键值的方法示例
2019/06/05 Javascript
Python随机生成数模块random使用实例
2015/04/13 Python
在DigitalOcean的服务器上部署flaskblog应用
2015/12/19 Python
Python使用struct处理二进制的实例详解
2017/09/11 Python
python使用正则表达式替换匹配成功的组
2017/11/17 Python
关于Tensorflow中的tf.train.batch函数的使用
2018/04/24 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
2018/12/05 Python
Python制作exe文件简单流程
2019/01/24 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
2019/04/10 Python
python实现视频分帧效果
2019/05/31 Python
Python 硬币兑换问题
2019/07/29 Python
python实现输入任意一个大写字母生成金字塔的示例
2019/10/27 Python
Python 分布式缓存之Reids数据类型操作详解
2020/06/24 Python
Python调用系统命令os.system()和os.popen()的实现
2020/12/31 Python
10种CSS3实现的loading动画,挑一个走吧?
2020/11/16 HTML / CSS
网页设计个人找工作求职信
2013/11/28 职场文书
优质服务口号
2014/06/11 职场文书
医德医风个人总结
2015/02/28 职场文书
环卫处个人工作总结
2015/03/04 职场文书
七年级作文(600字3篇)
2019/09/24 职场文书