RC5:在不同的路由器插座

时间:2016-08-30 13:27:03

标签: angular angular2-routing angular2-router3

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

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

  • app / login
  • app / dashboard / module1
  • app / dashboard / module2
  • 等...

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

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

1 个答案:

答案 0 :(得分:11)

以下是动态加载accoss NgModules和router-outlet的最小工作示例。

<强> app.module.ts

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

export class AppModule { }

<强> app.component.ts

@Component({
  template: '<router-outlet></router-outlet>'
})
export class BadAppComponent { }

<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);

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

<强> dashboard.module.ts

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

<强> dashboard.component.ts

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

<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'}
        ]
    }

]);

children确保儿童路线加载到当前<router-outlet>,即信息中心的路由器输出器

<强> accounts.module.ts

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

<强> accounts.routing.ts

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

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

<强> accounts.component.ts

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

就是这样。 您应该拥有构建“随时加载”应用程序所需的一切。 希望它有所帮助。