【问题标题】:RC5 : Lazy loading of NgModule in different router-outletRC5 : NgModule 在不同路由器出口的延迟加载
【发布时间】:2017-01-06 19:37:00
【问题描述】:

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

我的应用有两个深度级别。我有这样的路线:

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

每个 deph 级别都有自己的路由器插座,因此我可以在每个级别定义自定义布局。即登录和仪表板显示在应用路由器出口中,而模块1和模块2显示在仪表板路由器出口中。

按需动态加载每条路由的配置是什么?

【问题讨论】:

    标签: angular angular2-routing angular2-router3


    【解决方案1】:

    这是一个通过 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 { }
    

    &lt;router-outlet&gt;/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() {}
    }
    

    &lt;router-outlet&gt; 其中/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 确保子路由加载到当前&lt;router-outlet&gt; 中,即仪表板的 router-outler

    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 {
    }
    

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-08
    • 2017-12-07
    • 2015-03-28
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    相关资源
    最近更新 更多