Angular,在延迟加载的模块

时间:2017-11-10 18:19:26

标签: angular angular-router lazyload

我的应用有 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 语义相关。 (他们都与英雄有关)。

HeroHeaderComponentHeroNavComponent不是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主机数据是合适的。 (英雄或与恶棍有关)。

为了说清楚,我认为情况的根源在于:

  1. 我不想触及RootComponent的结构,例如它主持标题,方面和内容的方式。
  2. 所有类型都有自己的一组接口,例如英雄类型有英雄头像,英雄角色英雄内容,等等,而恶棍类型也有相应的类型。
    • 一种类型的界面A的内部结构与另一种类型的内部结构不同。
  3. 某些类型的接口(组件)涉及延迟加载的模块。(由于某种原因)但我希望其他接口不需要加载懒惰的模块,就像在eager-loaded模块中的其他组件一样加载到引导程序上。
  4. 以下是问题:

    延迟加载模块是否可能捆绑那些与自身具有语义关系的组件?

    无论是否,我是否正确处理了给定的问题?

    我写这个问题越具体,我就越困惑!

1 个答案:

答案 0 :(得分:1)

我有同样的感觉,当前架构出了问题。我会将所有英雄的东西都放在Hero模块中。因此,如果HeroModule是延迟加载的,所有这些东西(HeroHeader和HeroNav)也将是延迟加载的。

所以我会在RootComponent中有一个插座,并且在每个插入其中的模块中,我会有顶部和侧面以及主要子插座。