Three Modules as depicted...
|Elements| and |myForms| are imported into |App|.
Folder Structure
--应用
|--Elements angular 模块(里面有ConfigService)。
|--App angular module (angular imports Elements, and myForms (NPM PKG))
Elements module exports ConfigService using forRoot.
export class ElementsModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: ElementsModule,
providers: [ConfigService]
};
}
}
App module imports Elements and myForms modules.
import { Elements } from './local-dir';
import { myForms } from 'NPM PACKAGE';
@NgModule({
imports: [
Elements.forRoot(),
myForms
]
})
How would I give myForms access to the ConfigService in a component?
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){}
}
Update - further clarification.
- 有一个应用程序模块。
- app 模块导入 myForms 模块。此模块需要来自另一个模块的信息,该模块也将被加载。
- 将要加载的另一个模块是将从中选择的众多模块之一。但最终只会选择一个。
- 当所选模块出现在应用程序模块中时,我想在应用程序模块内与 myForms 模块共享它的内容。这是一次性共享,之后 myForms 模块不需要通信。
- 所选模块移交键/值 { anyKey: chosenModuleClassNamesToken }。
- 然后在 myForms 模块中,我可以调用共享数据以从所选模块中获取类名,如下所示:myFormsService[ chosenModuleDataKey ]。这将生成所选模块中的一个类的值,然后我将使用 ComponentFactoryResolver 在 View 中构建该值。
最佳答案
创建桶文件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';
关于javascript - 配置功能模块共享服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47782455/