我正在开展一个目前是Angular RC5和Material Design的项目。并不是说最后一部分是相关的。
由于显而易见的原因,我开始创建单独的模块并远离主模块中的所有内容。但是,我需要拥有所有模块共享的提供程序。 F / E我有一项服务,它与我们的后端系统进行最终连接。不同模块的Url等设置在不同的提供商上。所有这些服务目前都是单独的git项目的一部分,因为我也在iOnic应用程序和其他前端使用它们。
那么我该怎样才能拥有这项服务,在我为我的项目创建的所有模块中共享它的实例?
此外,我还要创建一个显示"小部件"从当前安装/可用的模块。这也取决于用户可以看到什么。 Java中的模拟结构将通过组件扫描/反射来解决。在Angular中,我假设我创建了一个全球可用的提供商,我可以在其中添加要放置的Type,然后可以在仪表板上使用?
最后一部分可能对模块很棘手,因为一切都是分开的,任何人都可以分享一些想法吗?他们基本上是2个问题,但我相信他们应该以一个非常类似的答案来解决。
所以在我的情况下,我想了解现有的路线,这与我所陈述的不同问题有关,但与此有关。
我想做的是这样的事情
@NgModule({
import:[
BaseModule,
someConstContainingRoutes
],
})
export class SubModuleWithRouting implements OnInit {
//Import routeAuthService from BasicModule
constructor(private routeAuthService: RouteAuthService){};
ngOnInit() {
this.routeAuthService.addRoutes(someConstContainingRoutes);
}
}
这样的模式让我不会在主要组件或w / e中设置我服务中的路由。当然,我们可以在第一次加载或w / e时执行此操作,但它感觉不对。
我想类似的事情必须由其他开发者完成,但我现在无法真正看到这里适合的模式。
也许已经有这样的钩子了。
我的BaseModule
对此模块一无所知。我的路由可选地包含某些权限值(它们只是一个枚举)。在canActivate
钩子上我想检查一下,所以我觉得它应该知道路线,因为我似乎无法在canActivate
钩子中获取它并为每个权限设置它看起来很傻。
答案 0 :(得分:2)
全球范围内提供模块提供商。
一个例外是延迟加载的模块,它们获得自己的子注入器。 延迟加载模块的提供程序作用于此模块。
如果您希望全局添加延迟加载模块的提供程序
static forRoot()
到您的模块和
export class SharedModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: SharedModule,
providers: [ UserService ]
};
}
}
所以可以用
导入 imports: [
SharedModule.forRoot()
],
另见https://angular.io/docs/ts/latest/guide/ngmodule.html#!#shared-module-for-root