RC5:在不同的路由器插座中延迟加载NgModule

Pat*_*ice 4 angular2-routing angular2-router3 angular

我正在使用RC5的NgModule来进行动态路由加载.

我的应用程序有两个深度级别.我有以下路线:

  • 应用程序/登录
  • 应用程序/仪表板/模块1
  • 应用程序/仪表板/模块2
  • 等等...

每个deph级别都有自己的路由器插座,所以我可以在每个级别定义自定义布局.即登录和仪表板显示在app router-outlet中,而module1和module2显示在仪表板router-outlet中.

根据需要动态加载每个路由的配置是什么?

Pat*_*ice 11

这是动态加载accoss NgModules和router-outlet的最小工作示例.

app.module.ts

@NgModule({
    declarations: [AppComponent],
    imports: [
        RouterModule,
        routing],
    bootstrap: [AppComponent],
    providers: [
        // some providers
    ]
})

export class AppModule { }
Run Code Online (Sandbox Code Playgroud)

app.component.ts

@Component({
  template: '<router-outlet></router-outlet>'
})
export class BadAppComponent { }
Run Code Online (Sandbox Code Playgroud)

<router-outlet>哪里/login/dashboard将要布局.

app.routes.ts

export const routes: Routes = [
    {path: '', redirectTo: '/login', terminal: true},
    {path: 'login', component: LoginComponent},
    {path: 'dashboard', loadChildren: 'app/dashboard/dashboard.module#DashboardModule'}
];

export const routing: ModuleWithProviders = RouterModule.forRoot(routes);
Run Code Online (Sandbox Code Playgroud)

loadChildren 指向要按需加载的模块.

dashboard.module.ts

@NgModule({
    declarations: [
        DashboardComponent
    ],
    imports: [CommonModule, RouterModule, routing],
    exports: [DashboardComponent],
    providers: [
        // some providers
    ]
})
export class DashboardModule { }
Run Code Online (Sandbox Code Playgroud)

dashboard.component.ts

@Component({
  moduleId: module.id,
  template: '<div>sidebar left</div><router-outlet></router-outlet><div>sidebar right</div>',
})
export class DashboardComponent {
  constructor() {}
}
Run Code Online (Sandbox Code Playgroud)

<router-outlet>在哪里/dashboard/accounts/dashboard/transfert将要布局.您不应该命名路由器插座

dashboard.routes.ts

export const routing: ModuleWithProviders = RouterModule.forChild([
    {path: '', component: DashboardComponent,
        children: [
            { path: 'accounts', loadChildren: 'app/dashboard/accounts/accounts.module#DashboardAccountsModule'},
            { path: 'virement', loadChildren: 'app/dashboard/transfert/transfert.module#DashboardTransfertModule'}
        ]
    }

]);
Run Code Online (Sandbox Code Playgroud)

children确保子路径加载到当前<router-outlet>即仪表板的路由器输出器中

accounts.module.ts

@NgModule({
    declarations: [
        AccountsFragment
    ],
    imports: [CommonModule, RouterModule, routing],
    exports: [AccountsFragment]
})
export class DashboardAccountsModule { }
Run Code Online (Sandbox Code Playgroud)

accounts.routing.ts

export const routing: ModuleWithProviders = RouterModule.forChild([
    { path: '', component: AccountsComponent}
]);
Run Code Online (Sandbox Code Playgroud)

这是路线的终点.它将显示在仪表板的路由器插座中,因为它是仪表板的子路径.

accounts.component.ts

@Component({
    moduleId: module.id,
    template: '<div>Your accounts!!</div>'
})
export class AccountsComponents {
}
Run Code Online (Sandbox Code Playgroud)

这就对了.您应该拥有构建"随时加载"应用程序所需的一切.希望能帮助到你.