javascript - 配置功能模块共享服务

标签 javascript angular module

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/

相关文章:

类似页面部分的 Ruby PageObject 设计

javascript - 为什么需要使用工厂函数指定 Angular 模块,而不是像我指定 Node 模块那样?

python - Python 模块注释有约定吗?

javascript - Angular 中的嵌套形式数组

javascript - debounce 功能意味着鼠标滚轮上的 e.preventDefault 不再工作

javascript - 使用纯原型(prototype)方法的 Javascript 中的寄生继承

javascript - 使用 Django 作为后端,将所选选项从一个表单传递到同一 html 页面中的另一个表单

javascript - 谷歌图表 : Overlapping bars - bring latest to front

python - 如何覆盖导入的 Python 模块中的常量?

javascript - 从 emberjs 表单中获取值(value)