Angular2 RC5 跨模块提供者/扫描
Angular2 RC5 Cross-Module Provider / Scanning
我正在做一个目前 Angular RC5 和 Material 最新设计的项目。并不是说最后一部分是相关的。
由于明显的原因,我开始创建单独的模块并不再将所有内容都放在主模块中。但是,我需要有在所有模块之间共享的提供程序。 F/E 我有一项服务可以最终连接到我们的后端系统。 Url 等不同模块的设置在不同的提供程序上。所有这些服务目前也是一个单独的 git 项目的一部分,因为我也在我们的 iOnic 应用程序和其他前端中使用它们。
那么我要如何才能让这项服务在我为我的项目创建的所有模块中共享它的实例?
我还想创建一个显示当前 installed/available 模块中的 "widgets" 的仪表板。这也取决于用户可以清楚地看到什么。 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
挂钩中获取它并为每个权限设置它似乎很愚蠢.
模块提供者在全球范围内提供。
一个例外是延迟加载的模块,它们有自己的子注入器。
延迟加载模块的提供者仅限于此模块。
如果你想全局添加延迟加载模块的提供者使用
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
我正在做一个目前 Angular RC5 和 Material 最新设计的项目。并不是说最后一部分是相关的。
由于明显的原因,我开始创建单独的模块并不再将所有内容都放在主模块中。但是,我需要有在所有模块之间共享的提供程序。 F/E 我有一项服务可以最终连接到我们的后端系统。 Url 等不同模块的设置在不同的提供程序上。所有这些服务目前也是一个单独的 git 项目的一部分,因为我也在我们的 iOnic 应用程序和其他前端中使用它们。
那么我要如何才能让这项服务在我为我的项目创建的所有模块中共享它的实例?
我还想创建一个显示当前 installed/available 模块中的 "widgets" 的仪表板。这也取决于用户可以清楚地看到什么。 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
挂钩中获取它并为每个权限设置它似乎很愚蠢.
模块提供者在全球范围内提供。
一个例外是延迟加载的模块,它们有自己的子注入器。 延迟加载模块的提供者仅限于此模块。
如果你想全局添加延迟加载模块的提供者使用
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