我的应用有 LazyModule ,这是延迟加载的, 还有 RootModule ,它们懒得加载它。
当应用导航到某个路线时, LazyModule 将懒洋洋地在 RootModule 组件的<router-outlet>
处呈现其组件其他<router-outlet>
将通过路由配置中的component
属性公开组件。
root.component.html:
<!-- super-simplified version -->
<router-outlet name="header"></router-outlet>
...
<router-outlet name="side"></router-outlet>
...
<router-outlet></router-outlet> <!-- primary -->
root.component.ts:
export class RootComponent {
...
// called from somewhere...
doNavigate() {
this.route.navigate({outlets: {primary: 'hero', top: 'hero-header', side: 'hero-nav'}})
}
...
}
root.routing.module.ts(route config):
{ path: 'hero', loadChildren: 'app/hero#LazyHeroModule' },
{ path: 'hero-header', component: HeroHeaderComponent, outlet: 'top' },
{ path: 'hero-nav', component: HeroNavComponent, outlet: 'side' }
// components from 2nd, 3rd lines are declared in *RootModule*
棘手的部分是那些route-config-components与 LazyModule 语义相关。 (他们都与英雄有关)。
HeroHeaderComponent
和HeroNavComponent
不是LazyHeroModule
的一部分,而是RootModule
的一部分,这对我来说似乎很难看。 (我是对的吗?)
我有更多延迟加载的模块,其行为类似于 LazyModule :其中每个模块都具有在 RootModule中声明的相应的分离家族组件 :
// config continues...
{ path: 'villain', loadChildren: 'app/villain#LazyVillainModule' },
{ path: 'villain-header', component: VillainHeaderComponent, outlet: 'top' },
{ path: 'villain-nav', component: VillainNavComponent, outlet: 'side' }
// components from 2nd, 3rd lines are declared in *RootModule*
如果这种路由配置存在更多,我认为留下来自不同类型的root.component.html
主机数据是合适的。 (英雄或与恶棍有关)。
为了说清楚,我认为情况的根源在于:
RootComponent
的结构,例如它主持标题,方面和内容的方式。以下是问题:
延迟加载模块是否可能捆绑那些与自身具有语义关系的组件?
无论是否,我是否正确处理了给定的问题?
我写这个问题越具体,我就越困惑!
答案 0 :(得分:1)
我有同样的感觉,当前架构出了问题。我会将所有英雄的东西都放在Hero模块中。因此,如果HeroModule是延迟加载的,所有这些东西(HeroHeader和HeroNav)也将是延迟加载的。
所以我会在RootComponent中有一个插座,并且在每个插入其中的模块中,我会有顶部和侧面以及主要子插座。