Angular 角度2中的延迟加载
我正试图将我的应用程序配置为使用RC5中的延迟加载模块。这就是我遇到的问题 我有一个模块,它使用Angular 角度2中的延迟加载,angular,Angular,我正试图将我的应用程序配置为使用RC5中的延迟加载模块。这就是我遇到的问题 我有一个模块,它使用RouterModule.forChild(路由器)并得到延迟加载,我们称之为LevelOneModule。这个模块也有一些模块延迟加载,我们称它们为LevelTwoModule-s。这在很大程度上是可行的,但我必须解决以下问题: 我在我的LevelOneModule中提供了一个服务,我需要在LevelTwoModule-s中作为一个单例提供该服务,但出于某种原因,每个LevelTwoModule都有
RouterModule.forChild(路由器)
并得到延迟加载,我们称之为LevelOneModule。这个模块也有一些模块延迟加载,我们称它们为LevelTwoModule-s。这在很大程度上是可行的,但我必须解决以下问题:
@NgModule({
imports: [
SharedModule,
levelOneRouter
],
providers: [SomeService],
declarations: [...]
})
LevelTwo模块:
@NgModule({
imports: [
SharedModule,
levelTwoRouter
],
providers: [],
declarations: [...]
})
declarations: [SomeComponent, ANotherComponent]
我得到了无法识别的元素错误,如果我试图分别在每个LevelTwoModule中注册声明,我得到的是两个模块声明的一部分错误
我还尝试为LevelOneModule创建另一个SharedModule,但也没有成功
非常感谢您提供的任何帮助或信息,为我指明正确的方向。回答问题#1
您应该要求LevelOneModule
注册singleton,您可以通过将所需的提供程序放在静态方法中来实现这一点:
@NgModule({
imports: [
SharedModule,
levelOneRouter
],
providers: [],
declarations: []
})
export class LevelOneModule{
static forRoot(): ModuleWithProviders {
return {
ngModule: LevelOneModule,
providers: [SomeService]
};
}
}
之后,在导入时调用leveltwodule
此静态方法:
@NgModule({
imports: [
LevelOneModule.forRoot(),
levelTwoRouter
],
providers: [],
declarations: []
})
这样,在LevelOneModule
中实例化的提供程序将作为一个单例传递给子模块
欲了解更多信息:
问题2的答案
使声明(管道/组件/指令/服务)在另一个模块中可用。您应该将这些声明添加到exports
参数中:
@NgModule({
imports: [
SharedModule,
levelOneRouter
],
providers: [],
declarations: [
ComponentIJustWantToUseInHere,
ComponentIWantToUseHereAndElsewhere
],
exports : [
ComponentIWantToUseHereAndElsewhere,
ComponentOrPipeOrWhateverIWantToUseElsewhere
]
})
export class LevelOneModule{
static forRoot(): ModuleWithProviders {
return {
ngModule: LevelOneModule,
providers: [SomeService]
};
}
}
哦,天哪,你说得对,事情很简单,不知道我怎么会错过。对于第二个问题,你可能也有解决方案吗?关于第一部分。我不能让它工作。它们仍然是单例,我是否也应该在app.module.ts中导入LevelOneModule.forRoot()?但是我担心这超出了延迟加载的目的。导出选项也不起作用。我想我得做一个猛扑来驱魔。