如何在Webpack中使用AsyncRoute异步加载组件?

时间:2016-08-03 06:51:09

标签: angular webpack angular2-router3

我迷失了我的理解,如何将异步模块加载到最新的angular-webpack-starter(RC4 with @ angular / router 3.0.0-beta.2)中运行。

有一个例子,但是获得更多解释,做什么以及如何一起玩将会有所帮助。

我做了什么: - 我导出了我的惰性组件路径:

export const referenzRoutes: RouterConfig = [
  { path: '', component: Test3 },
  { path: 'testApp', component: TestApp },
]

然后我在父组件路由中导入并使用子路由:

import {referenzRoutes} from "./+Referenz/referenz.routes";
export const routes: RouterConfig = [
  {...},
  {path: 'referenz', component: 'Referenz', canActivate: [ WebpackAsyncRoute ], 
  children: referenzRoutes},
]

我为每个组件定义了这样的异步路由:

export const asyncRoutes: AsyncRoutes = {
  'Referenz': require('es6-promise-loader!./+Referenz/referenz.component'),
  'TestApp': require('es6-promise-loader!./+Referenz/testApp/testApp.component'),
  'Test3': require('es6-promise-loader!./+Referenz/test3/test3.component'),
};

我从browser_adapter.js收到错误:84导航到TestApp时无法读取未定义的属性“路径”。这样做的正确方法是什么?

我还想知道,如果异步加载的组件名称对于整个应用程序必须是唯一的吗?

1 个答案:

答案 0 :(得分:0)

请参阅以下博文 AsyncRoute with Webpack

在下面实施以下代码

[
  new AsyncRoute({
      path: '/'
      , name: RouterService.CONTROL_CENTER_ROUTE
      , loader: () => new Promise((resolve: any) => {
          (<any>require).ensure(['control-center.component']
          , (require: any) =>
            resolve(require('control-center.component').ControlCenterComponent));
      })
      , useAsDefault: true
    })
  , new AsyncRoute({
    path: '/login'
    , name: RouterService.LOGIN_ROUTE
    , loader: () => new Promise((resolve: any) => {
        (<any>require).ensure(['login.component']
        , (require: any) =>
          resolve(require('login.component').LoginComponent));
    })
  })
];