AngularJs Managing Service Dependencies详解

 更新时间:2016年09月02日 15:27:08   作者:Lcllao  
本站主要介绍AngularJs Managing Service Dependencies的知识资料,这里整理相关知识,及简单示例代码,有兴趣的小伙伴可以参考下

  angular允许service将其他service声明为依赖,使用在自身实例化时使用的构造函数中。

  为了声明依赖,我们需要在工厂方法声明中指定它们,并且在工厂方法中通过$inject属性(字符串标识数组)或者使用array notation。

  通常$inject属性声明可以被丢弃(即https://www.jb51.net/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 资料的整理,后续继续添加相关资料,谢谢大家对本站的支持!

相关文章

  • AngularJS 2.0新特性有哪些

    AngularJS 2.0新特性有哪些

    本文介绍了其在AtScript、改善依赖入驻、Annotations、路由方案等方面的改变。虽然不知道打破原有是否是件好事,不过由于不向后兼容,我们需要为迁移做好计划
    2016-02-02
  • 对angularJs中自定义指令replace的属性详解

    对angularJs中自定义指令replace的属性详解

    今天小编就为大家分享一篇对angularJs中自定义指令replace的属性详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • 简述AngularJS相关的一些编程思想

    简述AngularJS相关的一些编程思想

    这篇文章主要介绍了AngularJS相关的一些编程思想,AngularJS是一款热门的JavaScript库,推荐!需要的朋友可以参考下
    2015-06-06
  • 浅谈angular.js中实现双向绑定的方法$watch $digest $apply

    浅谈angular.js中实现双向绑定的方法$watch $digest $apply

    Angular用户都想知道数据绑定是怎么实现的。你可能会看到各种各样的词汇:$watch,$apply,$digest它们是如何工作的呢?这里我想回答这些问题,其实它们在官方的文档里都已经回答了,但是我还是想把它们结合在一起来讲
    2015-10-10
  • AngularJS实现动态编译添加到dom中的方法

    AngularJS实现动态编译添加到dom中的方法

    这篇文章主要介绍了AngularJS实现动态编译添加到dom中的方法,结合实例形式分析了AngularJS动态编辑构建模板的相关操作技巧,需要的朋友可以参考下
    2016-11-11
  • Angular 2父子组件数据传递之@ViewChild获取子组件详解

    Angular 2父子组件数据传递之@ViewChild获取子组件详解

    这篇文章主要给大家介绍了关于Angular 2父子组件数据传递之@ViewChild获取子组件的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定参考学习价值,需要的朋友们下面来一起看看吧。
    2017-07-07
  • AngularJS表格添加序号的方法

    AngularJS表格添加序号的方法

    这篇文章主要介绍了AngularJS表格添加序号的方法,涉及AngularJS表格的遍历及序号添加实现技巧,需要的朋友可以参考下
    2017-03-03
  • 基于 angular material theming 机制修改 mat-toolbar 的背景色(示例详解)

    基于 angular material theming 机制修改 mat-toolbar 的背景色(示例详解

    最近在学习 angular,记录一下昨天的进展,解决的问题是通过 theme 的配置修改 mat-toolbar 的背景色,避免对色彩的硬编码,这篇文章主要介绍了基于 angular material theming 机制修改 mat-toolbar 的背景色,需要的朋友可以参考下
    2022-10-10
  • Angular.JS中的this指向详解

    Angular.JS中的this指向详解

    这篇文章主要给大家介绍了关于Angular.JS中this指向的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05
  • AngularJS表单和输入验证实例

    AngularJS表单和输入验证实例

    本篇文章详细的介绍了AngularJS表单和输入验证实例, AngularJS表单可以提供验证功能。有需要的可以了解一下。
    2016-11-11

最新评论