配置功能模块共享服务

时间:2017-12-12 22:18:37

标签: javascript angular module

  

如图所示的三个模块......

|Elements| and |myForms| are imported into |App|.
  

文件夹结构

- 应用

| --Elements角度模块(其中包含ConfigService)。

| --App角度模块(角度导入元素和myForms(NPM PKG))

  

元素模块使用 forRoot 导出 ConfigService

export class ElementsModule {
  static forRoot(): ModuleWithProviders {
    return {
      ngModule: ElementsModule,
      providers: [ConfigService]
    };
  }
}
  

应用模块导入元素 myForms 模块。

import { Elements } from './local-dir';
import { myForms } from 'NPM PACKAGE';

@NgModule({
  imports: [
    Elements.forRoot(),
    myForms
  ]
})
  

如何让 myForms 访问组件中的 ConfigService

forRoot 方法正常运行,因为我可以在 App 模块中访问。

import { ElementsModule, ConfigService } form './local-dir';

我想将它提供给 myForms 已经知道的 myForms 服务。或者找到一种方法,我不必将文件直接导入到我想要使用的 myForms 组件中。

如果我进入 myForms NPM PACKAGE,我可以执行以下操作,当然会有效。

import { ConfigService } from './local-dir';

@Component({
  selector: 'my-element',
  providers: [ConfigService]
});

export class MyElementComponent {

  constructor(private CS: ConfigService){} 
}
  

更新 - 进一步澄清。

  • 有一个应用模块。
  • app模块导入myForms模块。此模块需要来自另一个也将加载的模块的信息。
  • 将要加载的另一个模块是众多将要选择的模块之一。但最终,只会选择一个。
  • 当所选模块出现在app模块中时,我想在app模块内部与myForms模块共享一些东西。这是一次性共享,myForms模块在此之后不需要通信。
  • 所选模块移交{anyKey:chosenModuleClassNamesToken}的键/值。
  • 然后在myForms模块中,我可以调用共享数据从所选模块中获取类名:myFormsService [chosenModuleDataKey]。这将导致所选模块中的类的值,然后我将使用ComponentFactoryResolver在视图中构建。

1 个答案:

答案 0 :(得分:1)

创建一个桶文件index.ts

export * from '....' path to your module
export * from '....' path to your service

假设以下文件夹结构,

---modules
       |---- elements
       |---- configuration

在elements文件夹中创建一个桶文件,命名为index.ts

export * from './elements.module';
export * from '../configuration/configuration.service';

使用此文件作为

单行导入
import { ElementsModule, ConfigService } from '../elements';