angular - Angular 2 RC5/Router 3 RC1 中嵌套模块的路由

标签 angular angular2-routing angular2-router3

假设我有以下设置:

employee -------+ employee.module.ts
                | employee.routing.ts
                + employee.component.ts
                |
sales ----------+ sales.module.ts
                | sales.routing.ts
                + sales.component.ts
app.module.ts
app.routing.ts
app.component.ts

我希望我的路线看起来像

employee/14/sales

所以我继续定义这些路由声明:

app.routing.ts

...
import { AppComponent } from './app.component';

const appRoutes: Routes = [
    { path: '', component: AppComponent }
];

export const appRoutingProviders: any[] = [];
export const routing = RouterModule.forRoot(appRoutes, { useHash: true });

employee.routing.ts

...
import { EmployeeComponent } from './employee.component';

export const employeeRoutes: Routes = [
    { path: 'employee/:id', component: EmployeeComponent }  
];

export const employeeRouting = RouterModule.forChild(employeeRoutes);

sales.routing.ts

...
import { SalesComponent } from './sales.component';

export const salesRoutes: Routes = [
    { path: 'sales', component: SalesComponent }  
];

export const salesRouting = RouterModule.forChild(salesRoutes);

虽然我的模块采用这种形式:

app.module.ts

import { EmployeeModule } from './employee/employee.module';
import { AppComponent } from './app.component';

import {
    routing,
    appRoutingProviders
} from './app.routing';

@NgModule({
    imports: [
        ...
        EmployeeModule,
        routing
    ],
    declarations: [
        AppComponent
    ],
    bootstrap: [
        AppComponent
    ],
    providers: [
        appRoutingProviders
    ]
})

employee.module.ts

import { SalesModule } from '../sales/sales.module';
import { EmployeeComponent } from './employee.component';
import { employeeRouting } from './employee.routing';

@NgModule({
    imports: [
        SalesModule,
        employeeRouting
    ],
    declarations: [
        EmployeeComponent
    ]
})

sales.module.ts

import { SalesComponent } from './sales.component';
import { salesRouting } from './sales.routing';

@NgModule({
    imports: [
        salesRouting
    ],
    declarations: [
        SalesComponent
    ]
})
export class SalesModule {}

我现在可以移动到

employee/14

但是如果我尝试导航到

employee/14/sales

我很高兴

Error: Cannot match any routes: 'employee/14/sales'

不过,我可以输入

sales

它在不应该工作的时候工作,所以所有的路由都以某种方式直接连接到 /,而不是在彼此之上构建。

我错过了什么?

EDIT 可以找到演示该问题的 plnkr here .

最佳答案

我最终使它起作用。关键思想是不要包含 employee.routing.ts 中的 employeeRoutes(因为这会将 EmployeeModule 中的内容添加到 AppModule 的声明并导致另一条错误消息),而是在 app.routing.ts 中创建另一个 employeeRoutes ,它将延迟加载 EmployeeModule当导航到以 `

开头的路线时
/employee

相关代码如下:

import {
    RouterModule,
    Routes
} from '@angular/router';

import { AppComponent } from './app.component';

const employeeRoutes: Routes = [
  {
    path: 'employee',
    loadChildren: 'app/employee/employee.module#EmployeeModule'
  }
];

const appRoutes: Routes = [
    { path: '', redirectTo: 'welcome', pathMatch: 'full' },
    ...employeeRoutes
];

export const appRoutingProviders: any[] = [];
export const routing = RouterModule.forRoot(appRoutes, { useHash: true });

可以找到完整的 plnkr here .

关于angular - Angular 2 RC5/Router 3 RC1 中嵌套模块的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38971411/

相关文章:

Angular2 - 使用服务的组件之间的交互

angular - 错误 : Cannot match any routes. URL 段: ''

angular - Laravel 5.4 中的 Access-Control-Allow-Origin header 响应不适用于 POST

angular - 如何修复错误错误 : Uncaught (in promise): NullInjectorError: StaticInjectorError(AppModule)[HomeComponent -> HttpHeaders]

typescript - angular2 router.navigate inside auth0 回调

Angular 2 Uncaught( promise 中): TypeError: Cannot read property 'isActivated' of undefined

angular - 在嵌套子组件中使用辅助路由

angular - 手动更改路由参数导致用户界面不一致

angular - ngFor 索引加 1 或计数加 1

javascript - 如何在不注册后面的框的点击事件的情况下点击一个html框?