Angular 2 AOT和延迟加载子模块

时间:2017-01-02 09:59:26

标签: angular typescript angular2-routing angular2-aot

在升级到angular-cli.beta-24之前,我有这个路由结构:

+route1
 - +subroute1
 - +subroute2
 - +subroute3

但是,当router.module +route1中定义了子路由时,这会失败,因为现在无法在默认情况下启用AOT时找不到它们。

我可以通过不在那里定义子路由来实现它,而是将它们移动到与应用程序中所有其他路由相同的router.module。而是看起来像这样:

+route1
+subroute1
+subroute2
+subroute3

路线显然不再是子路线了。

虽然这有效,但对我来说它不是一个可行的解决方案,因为我的面包屑依赖于路由器树,如果你不能再拥有一个路由器树,它只会造成一团糟。

以下是一个示例(route1' s router.module文件):

const routes: Routes = [
  {
    path: '',
    component: Route1Component
  },
  {
    path: 'subroute1',
    loadChildren: '+subroute1/subroute1.module#Subroute1Module'
  },
  {
    path: 'subroute2',
    loadChildren: '+subroute2/subroute2.module#Subroute2Module'
  },
  {
    path: 'subroute3',
    loadChildren: '+subroute3/subroute3.module#Subroute3Module'
  }
];

为什么在使用AOT时无法定义这样的路线?我错过了什么?

1 个答案:

答案 0 :(得分:2)

AOT和延迟加载在BETA.21之后很好地协同工作(我对此做了post)。

而不是从loadChildren传递.相对路径,而应该从app文件夹开始:

const routes: Routes = [
  {
    path: '',
    component: Route1Component
  },
  {
    path: 'subroute1',
    loadChildren: 'app/+route1/+subroute1/subroute1.module#Subroute1Module'
  },
  {
    path: 'subroute2',
    loadChildren: 'app/+route1/+subroute2/subroute2.module#Subroute2Module'
  },
  {
    path: 'subroute3',
    loadChildren: 'app/+route1/+subroute3/subroute3.module#Subroute3Module'
  }
];

编辑1: 它可能来自你的桶。

beta.23遇到了一些麻烦,他们确实跳到了beta.24。但是在beta.23中引入了一个重大变化,如果你只阅读beta.24的更改日志,你可能会错过它。请查看Beta 23 changelog,了解更改:

  

蓝图:现在必须直接导入应用程序根模块和组件。 (例如,使用来自' ./ app / app.module'中的导入{AppModule};而不是从' ./ app /'中导入{AppModule};)

如果我理解的话,桶不能使用AOT(现在默认启用)。基本上,您可以删除index.ts并直接导入所需内容。