Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度:从惰性功能模块添加多个提供程序_Angular_Typescript_Angular Module - Fatal编程技术网

Angular 角度:从惰性功能模块添加多个提供程序

Angular 角度:从惰性功能模块添加多个提供程序,angular,typescript,angular-module,Angular,Typescript,Angular Module,我有一个ErrorModule(渴望)配置如下: export const CONFIG = new InjectionToken<ErrorConfig[]>('Module errors configuration.'); @NgModule({ imports: [... ] }) export class ErrorModule { static forRoot(config: ErrorConfig): ModuleWithProviders { ret

我有一个ErrorModule(渴望)配置如下:

export const CONFIG = new InjectionToken<ErrorConfig[]>('Module errors configuration.');


@NgModule({
  imports: [... ]
})
export class ErrorModule {
  static forRoot(config: ErrorConfig): ModuleWithProviders {
    return {
      ngModule: ErrorModule,
      providers: [
        ErrorService,
        { provide: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true },
        { provide: CONFIG, useValue: config, multi: true }
      ]
    };
  }

  static forChild(config: ErrorConfig): ModuleWithProviders {
    return {
      ngModule: ErrorModule,
      providers: [
        { provide: CONFIG, useValue: config, multi: true }
      ]
    };
  }
}
@NgModule({
  imports: [
    ErrorModule.forRoot(ERROR_CONFIG)
  ], ...
惰性加载的子功能模块:

@NgModule({
  imports: [
    ErrorModule.forChild(ERROR_CONFIG_CHILD)
  ], ...
我希望看到将配置
错误配置
错误配置子项
注入ErrorModule中定义的
错误服务

@Injectable
export class ErrorService {
    constructor(@Inject(CONFIG) private readonly errorConfigs: ErrorConfig[])
}
但是服务的
errorConfigs
(在构造函数中)只包含
core.module
中定义的
CONFIG
——在
forRoot()
函数(一个具有一个元素的数组)中定义的

惰性功能模块已加载并初始化,并且调用了
ErrorModule.forChild(…)

当只有核心模块的
CONFIG
注入令牌可用时,
ErrorService
已经及时构建,这是有意义的-功能模块尚未加载

我还尝试在构造函数外部使用Angular
Injector
导入
CONFIG
,结果相同

const configs: any[] = injector.get(CONFIG); // returns only root CONFIG

所以我的问题是:是否有可能以某种方式访问应用程序模块中的惰性模块提供的提供者?(在应用程序的根注入器中访问它?

我最终得到了一个解决方案,它使用
CoreModule
中定义的
ErrorService
FeatureModule
初始化时注册配置:

import { ErrorService } from '@core/error.service';

@NgModule({
    imports: [ CommonModule, ForFeatureModule, TranslateModule.forChild() ],
    declarations: [FeatureModule],
    providers: []
})
export class FeatureModule {
    constructor(
        private readonly translate: TranslateService, private readonly errorService: ErrorService) {
        translate.setTranslation('cz', i18n, true);

        // --- HERE --- errorService configures global error configuration
        errorService.addErrorMappings('FEATURE1', ERROR_MAPPING);
    }
}

你找到别的选择了吗?我想实现基本相同的东西,可插拔特性。乍一看,通过DI这似乎是不可行的,我并不感到惊讶,也不感到受骗。但很遗憾,这最终会导致一个您可以注册的单例服务(以非声明性或IoC方式)。@Morgantouveryquilling请看我下面的答案-一个替代方案。@Felix@Morgantouveryquilling你们认为我们应该在
@angular/router
模块中实现这个用例吗?不过,我还没有解开路由器配置加载器中的“黑魔法”。你有没有找到一个“角度法”来解决这个问题?我基本上需要同样的thing@devqon我使用了下面的解决方案。我没有办法解决这个问题。