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 学习笔记 Black.Caffeine 09.11.28
Nov 30 Javascript
javascript下4个跨浏览器必备的函数
Mar 07 Javascript
Google Dart编程语法和基本类型学习教程
Nov 27 Javascript
JQuery中上下文选择器实现方法
May 18 Javascript
vue.js实现表格合并示例代码
Nov 30 Javascript
js实现一个可以兼容PC端和移动端的div拖动效果实例
Dec 09 Javascript
根据Bootstrap Paginator改写的js分页插件
Dec 25 Javascript
基于JavaScript实现验证码功能
Apr 01 Javascript
JavaScript实现图片无缝滚动效果
Jul 07 Javascript
详解webpack多页面配置记录
Jan 22 Javascript
vue轮播图插件vue-concise-slider的使用
Mar 13 Javascript
微信小程序按钮去除边框线分享页面功能
Aug 27 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
ubuntu10.04配置 nginx+php-fpm模式的详解
2013/06/03 PHP
浅析PHP原理之变量(Variables inside PHP)
2013/08/09 PHP
PHP彩蛋信息介绍和阻止泄漏的方法(隐藏功能)
2014/08/06 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
2016/03/15 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
JQUERY1.6 使用方法四 检测浏览器
2011/11/23 Javascript
js+JQuery返回顶部功能如何实现
2012/12/03 Javascript
JS中prototype关键字的功能介绍及使用示例
2013/07/21 Javascript
js 窗口抖动示例
2013/09/04 Javascript
鼠标滑过出现预览的大图提示效果
2014/02/26 Javascript
javascript实现控制文字大中小显示
2015/04/28 Javascript
JavaScript访问字符串中单个字符的两种方法
2015/07/03 Javascript
JS实现按比例缩放图片的方法(附C#版代码)
2015/12/08 Javascript
浅谈javascript中onbeforeunload与onunload事件
2015/12/10 Javascript
javascript cookie的基本操作(添加和删除)
2017/07/24 Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
2017/08/04 jQuery
vue element upload实现图片本地预览
2019/08/20 Javascript
在vue中使用echars实现上浮与下钻效果
2019/11/08 Javascript
Vue+Java 通过websocket实现服务器与客户端双向通信操作
2020/09/22 Javascript
使用PYTHON接收多播数据的代码
2012/03/01 Python
python3实现TCP协议的简单服务器和客户端案例(分享)
2017/06/14 Python
Django 跨域请求处理的示例代码
2018/05/02 Python
python3.5 email实现发送邮件功能
2018/05/22 Python
解决pip install的时候报错timed out的问题
2018/06/12 Python
python3学生名片管理v2.0版
2018/11/29 Python
使用Python实现将list中的每一项的首字母大写
2019/06/11 Python
Python3监控疫情的完整代码
2020/02/20 Python
python实现每天自动签到领积分的示例代码
2020/08/18 Python
python pygame 愤怒的小鸟游戏示例代码
2021/02/25 Python
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
比较基础的php面试题及答案-编程题
2012/10/14 面试题
班主任工作实习计划
2015/01/16 职场文书
朋友聚会开场白
2015/06/01 职场文书
深入浅出讲解Java8函数式编程
2022/01/18 Java/Android
Win11快速关闭所有广告推荐
2022/04/19 数码科技
SQL Server中的逻辑函数介绍
2022/05/25 SQL Server