UDN-企业互联网技术人气社区

板块导航

浏览  : 360
回复  : 2

[AngularJS] AngularJS开发指南29:管理服务依赖

[复制链接]
葡萄柚的头像 楼主
发表于 2015-12-20 14:27:58 | 显示全部楼层 |阅读模式
  AngularJS允许服务声明它的实例和构造依赖的服务。

  要声明依赖,你可以在工场方法参数中隐式指明他们,也可以将$inject属性设置成包含了依赖名称的数组,或者是使用数组表示法。不推荐使用$inject属性的这种方法。formatDate

  使用数组表示法:
  1. function myModuleCfgFn($provide) {
  2.   $provide.factory('myService', ['dep1', 'dep2', function(dep1, dep2) {}]);
  3. }
复制代码

  使用$inject属性:
  1. function myModuleCfgFn($provide) {
  2.   var myServiceFactory = function(dep1, dep2) {};
  3.   myServiceFactory.$inject = ['dep1', 'dep2'];
  4.   $provide.factory('myService', myServiceFactory);
  5. }
复制代码

  使用隐式依赖(使用代码压缩是会失效):
  1. function myModuleCfgFn($provide) {
  2.   $provide.factory('myService', function(dep1, dep2) {});
  3. }
复制代码

  下面是一个互相依赖的两个服务的例子。它们也依赖了其他AngularJS提供的服务。
  1. /**
  2. * batchLog service allows for messages to be queued in memory and flushed
  3. * to the console.log every 50 seconds.
  4. *
  5. * @param {*} message Message to be logged.
  6. */
  7.   function batchLogModule($provide){
  8.     $provide.factory('batchLog', ['$timeout', '$log', function($timeout, $log) {
  9.       var messageQueue = [];

  10.       function log() {
  11.         if (messageQueue.length) {
  12.           $log('batchLog messages: ', messageQueue);
  13.           messageQueue = [];
  14.         }
  15.         $timeout(log, 50000);
  16.       }

  17.       // start periodic checking
  18.       log();

  19.       return function(message) {
  20.         messageQueue.push(message);
  21.       }
  22.     }]);

  23.     /**
  24.      * routeTemplateMonitor monitors each $route change and logs the current
  25.      * template via the batchLog service.
  26.      */
  27.     $provide.factory('routeTemplateMonitor',
  28.                 ['$route', 'batchLog', '$rootScope',
  29.          function($route,   batchLog,   $rootScope) {
  30.       $rootScope.$on('$routeChangeSuccess', function() {
  31.         batchLog($route.current ? $route.current.template : null);
  32.       });
  33.     }]);
  34.   }

  35.   // get the main service to kick of the application
  36.   angular.injector([batchLogModule]).get('routeTemplateMonitor');
复制代码

  上例中有几点要注意:

  • batchLog服务依赖内建的$timeout和$log服务,并且允许消息批量地使用console.log记录。
  • 和batchLog服务一样,routeTemplateMonitor服务依赖内建的$route服务。
  • 自定义的服务都使用隐式表示和数组法来表示自己的依赖。最重要的是数组中的服务的名字顺序要和工厂函数参数的名字顺序对应。除非依赖是隐式地通过函数参数名表示的,那么就是有声明依赖的数组名称顺序决定依赖注入的顺序。

  相关主题

  • 理解AngularJS服务
  • 创建AngularJS服务
  • 管理服务依赖
  • 测试AngularJS服务

  相关API

  • Angular Service API Angular Injector API

  扩展阅读:

  AngularJS开发指南 全

相关帖子

发表于 2015-12-20 14:28:35 | 显示全部楼层
其实js如果遇到web安全类的项目,那就又要做牺牲了,无法读写文件,访问受限。。。哎。。。
使用道具 举报

回复

发表于 2015-12-21 05:11:29 | 显示全部楼层
鄙视楼下的顶帖没我快,哈哈
使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部