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 相关文章推荐
学习YUI.Ext 第三天
Mar 10 Javascript
按下回车键指向下一个位置的一个函数代码
Mar 10 Javascript
jQuery实现跨域
Feb 03 Javascript
基于jQuery实现仿淘宝套餐选择插件
Mar 04 Javascript
javascript通过元素id和name直接取得元素的方法
Apr 28 Javascript
JS实现网页上随机产生超链接地址的方法
Nov 09 Javascript
Bootstrap免费字体和图标网站(值得收藏)
Mar 16 Javascript
如何使用Bootstrap 按钮实例详解
Mar 29 Javascript
基于node.js express mvc轻量级框架实践
Sep 14 Javascript
JS实现仿微信支付弹窗功能
Jun 25 Javascript
Node如何后台数据库使用增删改查功能
Nov 21 Javascript
vue $router和$route的区别详解
Dec 02 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
PHP 文件类型判断代码
2009/03/13 PHP
编写安全 PHP应用程序的七个习惯深入分析
2013/06/08 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
2014/12/15 PHP
php 数组处理函数extract详解及实例代码
2016/11/23 PHP
PHP随机生成中文段落示例【测试网站内容时使用】
2020/04/26 PHP
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
js鼠标滑过弹出层的定位IE6bug解决办法
2012/12/26 Javascript
jQuery中on()方法用法实例详解
2015/02/06 Javascript
javascript中attachEvent用法实例分析
2015/05/14 Javascript
详解vue slot插槽的使用方法
2017/06/13 Javascript
bootstrap modal+gridview实现弹出框效果
2017/08/15 Javascript
vue2.0学习之axios的封装与vuex介绍
2018/05/28 Javascript
JS前端知识点 运算符优先级,URL编码与解码,String,Math,arguments操作整理总结
2019/06/27 Javascript
简述vue-cli中chainWebpack的使用方法
2019/07/30 Javascript
[01:07:21]NAVI vs VG Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
[02:29]大剑、皮鞭、女装,这届DOTA2勇士令状里都有
2020/07/17 DOTA
Python读取网页内容的方法
2015/07/30 Python
Python自动生产表情包
2017/03/17 Python
Python人脸识别初探
2017/12/21 Python
Python 利用内置set函数对字符串和列表进行去重的方法
2018/06/29 Python
pip安装py_zipkin时提示的SSL问题对应
2018/12/29 Python
PyQt5 实现给窗口设置背景图片的方法
2019/06/13 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
2019/12/31 Python
Python3 shelve对象持久存储原理详解
2020/03/23 Python
使用matlab 判断两个矩阵是否相等的实例
2020/05/11 Python
TensorFlow-gpu和opencv安装详细教程
2020/06/30 Python
Mytheresa美国官网:德国知名的女性奢侈品电商
2017/05/27 全球购物
西班牙自行车和跑步商店:Alltricks
2018/07/07 全球购物
描述JSP和Servlet的区别、共同点、各自应用的范围
2012/10/02 面试题
2014五一国际劳动节活动总结范文
2014/04/14 职场文书
体育专业自荐书
2014/05/29 职场文书
检讨书范文
2015/01/27 职场文书
小学语文新课改心得体会
2016/01/22 职场文书
Apache压力测试工具的安装使用
2021/03/31 Servers
vue引入Excel表格插件的方法
2021/04/28 Vue.js
Apache Hudi的多版本清理服务彻底讲解
2022/03/31 Servers