Angular2 RC5跨模块提供商/扫描

时间:2016-08-19 10:16:22

标签: angular module angular2-modules

我正在开展一个目前是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钩子中获取它并为每个权限设置它看起来很傻。

1 个答案:

答案 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