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...