• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

AngularJs Managing Service Dependencies详解

angularjs 搞代码 4年前 (2021-12-31) 26次浏览 已收录 0个评论

本站主要介绍AngularJs Managing Service Dependencies的知识资料,这里整理相关知识,及简单示例代码,有兴趣的小伙伴可以参考下

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

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

  通常$inject属性声明可以被丢弃(即https://www.gaodaima.com/article/91815.htm中提到的隐式依赖注入,但这个是实验属性,在而且在压缩混淆后会失效,慎用!)。

使用array notation

 function myModuleCfgFn ($provide) { $provide.factory(‘myService',[‘dep1','dep2',function(dep1,dep2){}]); }<br />

使用$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.fa<strong style="color:transparent">来源gaodai#ma#com搞@@代~&码网</strong>ctory('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 Managing Service Dependencies详解的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:AngularJs Managing Service Dependencies详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址