2016-12-13 152 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

毫无疑问,它并没有为我工作,既尝试了“路由器之前的孩子”和“儿童之前的路由器”,都没有奏效。 –