【发布时间】:2016-08-28 19:33:53
【问题描述】:
我正在尝试将子模块加载到另一个子模块中,如下图所述:
List of modules with routing info
当我尝试在“主模块”中加载具有自己的路由的子模块“材料模块”时,它会引发以下错误:
browser_adapter.js:84 例外:错误:未捕获(承诺): TypeError:无法读取未定义的属性“导入”
我想将来在另一个父模块中重用相同的Material.module。
这是我的 app.routing.ts:
const appRoutes: Routes = [{
path: '',
redirectTo: '/gologin',
pathMatch: 'full'
},
{
path: 'gologin',
loadChildren: 'app/login/login.module'
},
{
path: 'goHome',
loadChildren: 'app/home/home.module'
}]
export const routing = RouterModule.forRoot(appRoutes, {
useHash: true
});
我的 Home.route.ts 如下所示:
const appRoutes1: Routes = [{
path: '',
component: 'HomeComponent',
children:[
{
path: '',
loadChildren: 'app/Material/Material.module'
}]}]
export const routing = RouterModule.forChild(appRoutes1);
我的 Home.module.ts 如下所示:
import { routing } from './home.routes';
import {MaterialModule} from '../Material';
import {HomeComponent} from './home';
@NgModule({
declarations: [
// Components / Directives/ Pipes
HomeComponent,
],
imports: [
MaterialModule,
routing
],
// providers:[HeaderService]
})
export class HomeModule {
}
我的 Material.route.ts 如下所示:
import { Routes, RouterModule } from '@angular/router';
import { OrderComponent } from './Order/OrderComponent.component';
import { InventoryComponent } from './Inventory/InventoryComponent.component';
import { POComponent } from './PO/POComponent.component';
export const appRoutes1: Routes = [
{
path: '',
component: OrderComponent
},
{
path: '/inventory',
component: InventoryComponent
},
{
path: '/PO',
component: POComponent
},
];
export const routing = RouterModule.forChild(appRoutes1);
我的 Material.module.ts 如下所示:
@NgModule({
declarations: [
// Components / Directives/ Pipes
OrderComponent ,InventoryComponent ,POComponent
],
imports: [
routing //Material.routing
],
})
export class MaterialModule {
}
如何在 Angular 2 RC5 的另一个子模块中解决此类子模块加载问题。
【问题讨论】:
-
能否提供完整的app.routing.ts、home.module.ts和home.route.ts...
-
@Patrice,我已经用完整的细节更新了这个问题。
-
尝试静态加载模块(没有 loadChildren)我发现它更容易理解和工作。同样在 Home.module 中,您导入 MaterialModule,同时通过路由使用 loadChildren 动态加载它......您应该选择。静态导入会预加载模块并取消延迟加载目标。