说我有像这样的服务模块
// 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,
}
在我的角度模块中,我希望能够注册所有这些(雄辩地)。
// awesomeModule.js
import services from './services';
angular.module('awesomeModule', [])
.services(services); // Want to emulate something like this
我很难找到一个很好的方法来注册索引模块,这样我就可以防止在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);
答案 0 :(得分:3)
你不能在Angular中“批量”注册模块。但是,使用forEach
, arrow functions, and destructuring,您可以在一行中非常干净地注册每个导入。
首先重构如何将服务导出到以下对象数组模式:
export default [
{
name: "someService",
fn: someService
},
{
name: "anotherService",
fn: anotherService
}
]
然后使用这样的导出:
// 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...