Javascript 角度-模块化定义所有服务

Javascript 角度-模块化定义所有服务,javascript,angularjs,Javascript,Angularjs,假设我有这样的服务模块 // services/someService.js export default function($q) { return $q.doSomething(); } // services/anotherService.js export default function($state) { return $state.doAnotherThing(); } 假设我有一个服务索引文件 // services/index.js import someServi

假设我有这样的服务模块

// services/someService.js
export default function($q) {
  return $q.doSomething();
}

// services/anotherService.js
export default function($state) {
  return $state.doAnotherThing();
}
假设我有一个服务索引文件

// services/index.js
import someService from 'someService';
import antoherService from 'anotherService';

export default {
  someService: someService,
  anotherService: anotherService,
}
在我的angular模块中,我希望能够(有说服力地)记录所有这些参数

我很难找到一种干净的方法来注册索引模块,这样就可以防止在
awesomeModule
中单独注册每个服务。有办法吗

*编辑*

根据@sdgluck的建议,我创建了一个实用函数/模块,用于向模块注册任意服务类型

// utils.js
export function register(module, type, modules) {
  for (let extension in modules) {
    module[type](extension, modules[extension]);
  }
}
在我的主模块文件中,我包含了实用程序和注册服务类型,如下所示

// main.js
import {register} from './utils';
register(angular.module('awesomeModule'), 'service', services);

您不能在Angular中“批量”注册模块。但是,您可以在一行中非常干净地注册每个导入

首先,重新构造将服务导出到以下对象阵列模式的方式:

然后像这样使用导出:

// awesomeModule.js
import services from './services';

let app = angular.module('awesomeModule', []);

services.forEach(({name, fn}) => app.service(name, fn));
这将产生与执行以下操作相同的结果:

services.service('someService', services.someService);
services.service('anotherService', services.anotherService);
// and so on...

为什么不让每个服务注册到位?如果你按照你想要的方式做,每次你需要添加一个新的服务时,你都会有两个修改点。我正在使用一个函数从索引文件导出目录中的所有模块。这不会是一个问题,因为它们是自动加载到索引中的。我的例子并不完全代表这一点。啊,当然!好建议<代码>服务是一个对象文字,而不是数组。我们需要
来。。。在本例中,
中。。。但是是的,这个想法是正确的是的,你说得很对!我会相应地更新我的答案。谢谢
// awesomeModule.js
import services from './services';

let app = angular.module('awesomeModule', []);

services.forEach(({name, fn}) => app.service(name, fn));
services.service('someService', services.someService);
services.service('anotherService', services.anotherService);
// and so on...