2016-12-13 193 views
0

我在angular2中有根模塊和子模塊,都有自己定義的路線。 在子模塊正在配置RouterModule作爲Angular2兒童路線

RouterModule.forChild(ROUTES) 

在根模塊(父),我配置RouterModule作爲

RouterModule.forRoot(ROUTES) 

我在這兩個孩子和根使用相同路線名稱

兒童

export const ROUTES: Routes = [ 
    { path: '',  component: HomeComponent }, //outputs I am child 
    { path: 'home', component: HomeComponent } 
]; 

在根(父)

export const ROUTES: Routes = [ 
    { path: '',  component: HomeComponent }, //outputs I am parent 
    { path: 'home', component: HomeComponent } 
]; 

我導入子單元中的根模塊

import ..... 
import {AppModule as ChildModule} from 'child-module/src/app/app.module'; 


@NgModule({ 
    bootstrap: [ AppComponent ], 
    declarations: [ 
    AppComponent, 
    HomeComponent 
    ], 
    imports: [ // import Angular's modules 
    BrowserModule, 
    FormsModule, 
    HttpModule, 
    ChildModule, 
    RouterModule.forRoot(ROUTES, { useHash: true, preloadingStrategy: PreloadAllModules }) 

    ], 
    providers: [ 
    ] 
}) 
export class AppModule { 

} 

當我打開我的組件(我的意思是根模塊),默認路由總是要孩子模塊,而不是rootmodule即它的打印「我是孩子」,在我期望「我是父母」的情況下,只有在加載子路徑時才應該加載子路徑,我如何將其路由到根(父)模塊的默認路徑而不是子模塊?

+0

你有沒有考慮過在父路徑中加入延遲加載的子路徑,比如'{path:child,loadChildren:'子模塊的路徑}}?你可以在這裏閱讀更多關於它的信息(https://angular.io/docs/ts/latest/guide/router.html) –

+0

@Madhu Ranjan,問題是孩子(默認)路由默認加載,即使沒有配置我想避免 –

+0

您是否在子模塊中配置了子路由?如果是的話,那麼當你在應用模塊中導入子模塊時,子模塊的路由將被添加.. –

回答

1

我認爲這回答你的問題:

Angular的路由器從上到下匹配路由。匹配的第一條路由是路由器導航到的路由。您在RootModule的路線之前加載ChildModule的路線,這意味着這些路線優先於RootModule的路線。當導航到''時,路由器將首先檢查ChildModule的路線,找到一個匹配並帶你到那裏。如果您在imports聲明中將ChildModuleRootModule的地點互換,那麼RootModule的路線將始終導航至。

你可以在https://angular.io/docs/ts/latest/guide/router.html瞭解更多。

+0

毫無疑問,它並沒有爲我工作,既嘗試了「路由器之前的孩子」和「兒童之前的路由器」,都沒有奏效。 –