gpt4 book ai didi

javascript - Angular - 模块化定义所有服务

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:58:54 25 4
gpt4 key购买 nike

假设我有这样的服务模块

// 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 模块中,我希望能够( Eloquent 地)注册所有这些。

// 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);

最佳答案

您不能在 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...

关于javascript - Angular - 模块化定义所有服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32525820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com