2

我正在开发一个目前是 Angular RC5 和 Material Design 最新的项目。并不是说最后一部分是相关的。

由于显而易见的原因,我开始创建单独的模块并远离主模块中的所有内容。但是,我需要有在所有模块之间共享的提供程序。F/EI 有一项服务,它最终连接到我们的后端系统。不同模块的 URL 等设置在不同的提供程序上。所有这些服务目前也是一个单独的 git 项目的一部分,因为我也在我们的 iOnic 应用程序和其他前端中使用它们。

那么我将如何去拥有这项服务,它在我为我的项目创建的所有模块中共享它的实例?

我还想创建一个仪表板,显示当前安装/可用模块中的“小部件”。这也取决于用户可以清楚地看到什么。Java 中的类似构造将通过组件扫描/反射来解决。在 Angular 中,我假设我会创建一个全球可用的提供程序,我可以在其中添加要放置的类型,然后在仪表板上可用?

模块的最后一部分可能很棘手,因为一切都是分开的,有人可以分享一些想法吗?它们基本上是 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钩子中获取它并且为每个权限设置它似乎很愚蠢。

4

1 回答 1

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

于 2016-08-19T10:27:29.900 回答