3

Ich habe die folgende Routing-Konfiguration in meiner App:Routing & Module

app.module.ts 

@NgModule({ 
    declarations: [ 
    AppComponent 
    ], 
    imports: [ 
    BrowserModule, 
    HttpModule, 
    AppRouting, 

    // Feature Modules 
    CoreModule, 
    AuthModule, 
    AdminModule, 
    SharedModule 
    ], 
    bootstrap: [AppComponent] 
}) 

app.routing.ts 

const routes: Routes = [ 
    { path: '', redirectTo: 'admin', pathMatch: 'full' }, 
    { path: 'admin', loadChildren:() => AdminModule } 
]; 

@NgModule({ 
    imports: [ 
    RouterModule.forRoot(routes, {preloadingStrategy: PreloadAllModules}) 
    ], 
    exports: [RouterModule] 
}) 

admin.module.ts

@NgModule({ 
    declarations: [ 
    AdminComponent 
    ], 

    imports: [ 
    CommonModule, 
    FormsModule, 
    UserModule, 

    AdminRouting, 
    SharedModule 
    ], 

    providers: [ 
    UserService 
    ] 
}) 

admin.routing.ts 

const routes: Routes = [ 
    { path: '', component: AdminComponent, canActivate: [AuthGuard], children: [ 
    { path: 'users', loadChildren:() => UserModule } 
    ]} 
]; 

@NgModule({ 
    imports: [ 
    RouterModule.forChild(routes) 
    ], 
    exports: [RouterModule] 
}) 

user.module.ts 

@NgModule({ 
    declarations: [ 
    UserComponent, 
    UserManageComponent, 
    UserListComponent 
    ], 

    imports: [ 
    CommonModule, 
    FormsModule, 

    UserRouting, 
    SharedModule 
    ] 
}) 

user.routing.ts 

const routes: Routes = [ 
    { path: '', component: UserComponent, children: [ 
    { path: '', component: UserListComponent }, 
    { path: 'new', component: UserManageComponent }, 
    { path: ':id/edit', component: UserManageComponent } 
    ]}, 
]; 

@NgModule({ 
    imports: [ 
    RouterModule.forChild(routes) 
    ], 
    exports: [RouterModule] 
}) 

Und es gibt das Problem:

Was ich meine Bewerbung Routing erwartet does:

/users => not a valid route 
/users/new => not a valid route 

/admin/users => valid route 
/admin/users/new => valid route 
/admin => valid route (should render AdminComponent) 

Ich weiß nicht warum, aber wenn ich/users eingeben, rendern die Anwendungen UserComponent, was ist nicht das Verhalten, das ich möchte.

Ich möchte UserComponent nur von/admin/users zugreifen.

Kann mir jemand erklären warum?

+0

Weil du alles dem Server-Betreiber sind Umleitung: '{Pfad: '', RedirectTo: 'admin', pathMatch: 'voll'}' – jonrsharpe

+0

Das ist nicht das Problem. Selbst wenn ich diesen Pfad entferne, funktioniert die Anwendung immer noch nicht wie erwartet./Benutzer sollten nicht verfügbar sein, aber/admin/users. –

+0

Bonus aus dem [style guide] (https://angular.io/guide/styleguide#style-02-12): * Beende den Dateinamen eines RoutingModules mit '-routing.module.ts' * (das CLI wird dies tun) Mach das für dich – Leo

Antwort

1

Haben Sie bereits versucht, AppRouting-Importe zum Ende des Imports-Arrays zu verschieben, wie es empfohlen wird here?

1

Versuchen, dies zu sehen:

admin.routing.ts 

const routes: Routes = [ 
    { path: 'admin', component: AdminComponent, canActivate: [AuthGuard], 
     children: [{ path: 'users', loadChildren:() => UserModule }]} 
];