我正在打电话给你,要求你在这里使用什么方法:我已经测试了许多东西来解决我的问题,我至少有4个工作解决方案,但我不知道哪一个是最好的,如果其中一些只是因为我所做的其他事情的副作用而工作,不应该使用...
我在文档中找不到任何指向这些解决方案(或另一个)的解决方案
首先,这是我的情况:我正在构建一个连接到数据API的应用程序,并构建不同的部分,每个部分包含dataviz.
我将站点的各个部分构建为模块,但它们共享一个名为DataService的服务(这些模块中的每一个都将使用DataService来获取和处理数据).
我的DataService需要一个配置文件,其中包含许多特定于每个部分的选项,并存储在它自己的文件夹中.
因此,我需要在module.ts文件的providers部分中为每个部分单独提供DataService,并且避免将DataService复制到每个模块似乎是一种好习惯...
所以文件的架构是:
--Dashboard module
----data.service.ts
----Section1 module
------Section1 config file
----Section2 module
------Section2 config file
Run Code Online (Sandbox Code Playgroud)
我尝试了多个似乎在部分模块文件中工作的东西:
解决方案1:注射
(即使我没有在任何地方看到这种情况,我也无法在没有引号的情况下使注射工作)
模块文件:
import { DataService } from '../services/data.service';
import viewConfig from './view.config.json';
@NgModule({
imports: [ ... ],
declarations: [ ... ],
providers: [
{ provide: 'VIEW_CONFIG', useValue: viewConfig },
DataService,
]})
export class Section1Module { }
Run Code Online (Sandbox Code Playgroud)
部分文件:
@Injectable()
export class DataService {
constructor(@Inject('VIEW_CONFIG') private viewConfig : any) {}
}
Run Code Online (Sandbox Code Playgroud)
解决方案2:工厂提供商
ng服务重启后无法正常工作(请参阅更新)
灵感来自https://angular.io/docs/ts/latest/guide/dependency-injection.html#!#factory-provider
模块文件:
import { DataService …
Run Code Online (Sandbox Code Playgroud)