如何从 *导入中动态创建角模块提供商列表



我正在尝试(此时大多是出于好奇心),以简化将我的服务导入我的模块文件,如果可能的话,我不确定。似乎有可能,但是我撞墙了。最终目标是能够在另一个文件夹中为我的服务创建一个桶文件,并将该文件中的所有内容都导入到引用该桶文件的模块中。这是我想做的示例:

import * as SERVICES from './services';
@NgModule({
  imports: [],
  declarations: [],
  providers: [
    ...Object.values(SERVICES)
  ]
})
export class ProjectsModule { }

它尤其令人沮丧,因为记录"对象。值(服务)"表明它创建了一系列服务对象,但是Angular CLI继续投掷"只有提供商和类型的实例,允许:[?null?]"。

我尝试在服务对象上手动迭代,而不是使用对象。我已经尝试使用映射函数来创建从object.values(服务)返回的每个值中创建一个提供商对象。

更令人沮丧的是,以下实际上可以正常工作:

providers: [
    SERVICES.Service1,
    SERVICES.Service2,
    SERVICES.Service3
  ]

,但这打败了能够在不调整模块导入的情况下更新枪管文件的点。

由于某种原因将这些属性转换为数组会破坏某些东西。我假设我缺少有关打字稿如何实际导入事物的一些关键信息。我希望我试图做的事情会这样,只能动态:

import { service1, service2, service3 } from './services';
const myServices = [
        service1, 
        service2, 
        service3 
];
@NgModule({
  imports: [],
  declarations: [],
  providers: [
    ...myServices
  ]
})
export class ProjectsModule { }

编辑:根据要求,这是我的自动生成的枪管文件

export * from './project.resolver';
export * from './projects.resolver';
export * from './projects.service';

所有服务都是可注射的,并且没有使用新的" fustan':'root'"语法。

尝试此

在您的services.ts文件中:

export const SERVICES = [
    Service1,
    Service2,
    Service3,
];

然后导入您的Projects Module

import { SERVICES } from './services';
@NgModule({
  imports: [],
  declarations: [],
  providers: [
    ...SERVICES
  ]
})
export class ProjectsModule { }

最新更新