2017-02-20 10 views
0

Я хочу создать макет для своего приложения. Таким образом, я использую следующие маршруты:Угловая 2. Основная компоновка для всех маршрутов

export const routes: Routes = [ 
{ 
    path: '', 
    component: MainLayoutComponent, 
    children: [ 
     { 
     path: '', 
     redirectTo: 'contact', 
     pathMatch: 'full' 
     }, 
     { 
     path: 'contact', 
     loadChildren : 'app/contact/contact.module#ContactModule' 
     } 
    ] 
    } 

]; 

@NgModule({ 
    imports: [RouterModule.forRoot(routes)], 
    exports: [RouterModule] 
}) 
export class AppRoutingModule {} 

Как вы можете видеть, я использую MainLayoutComponent для разметки. И, когда мое приложение начинается, я хочу перенаправить на путь contact.

Схема содержит навигации и router-outlet:

@Component({ 
    template: ` 
    <nav>Navigation content</nav> 
    <div class="container"><router-outlet></router-outlet></div> 
    `, 
}) 

Это шаблон в ContactComponent:
<h2>Contact Component</h2>

Проблема, когда приложение запускается я вижу Contact Component сообщение, но я не вижу навигации. Но, если я открою localhost:3000/contact, тогда я вижу навигацию и сообщение Contact Component. Что мне не хватает?

Это Plunker. Вы можете проверить, я создал Go to Contact кнопку для перенаправления на /contact url.

ответ

0

Возможно, вы сделали это нарочно ... но вы, кажется, действительно переусердствовали. Вы можете легко добиться того, что вы пытаетесь сделать с гораздо более простой структурой и помещая навигацию в главном компоненте:

https://plnkr.co/edit/pCQvJ3PwO0nMPxRvWR1o?p=preview

Во всяком случае - причина вашей plunker не делать то, что вы ожидаете, потому что в вашем контактном модуле вы определили некоторые маршрутизации, а также:

{ path: '', component: ContactComponent } 

Я удалил контакт маршрутизации от контактного элемента и теперь, кажется, работает:

@NgModule({ 
    imports:  [ ], 
    declarations: [ ContactComponent ], 
    providers: [ ] 
}) 
export class ContactModule { } 

https://plnkr.co/edit/Rwl5Hw83LfkLmG4wF3oK?p=preview

+0

Спасибо за ответ, хорошо, я делаю это таким образом для лучшей настройки. Если мне нужен другой макет, я просто создам его. Например, для страницы входа/регистрации. – user348173

+0

Но, я не могу понять, почему маршрут внутри ContactModule обрабатывает корневой URL, я регистрирую этот маршрут с помощью метода 'forChild'. Не могли бы вы объяснить мне? – user348173

+0

Это связано с тем, что маршруты, объявленные с помощью forChild, объединяются в маршруты, объявленные с помощью forRoot. В вашем случае вы объявите маршрут: { путь: '', RedirectTo: 'контакт', pathMatch: 'полный' }, { путь: 'контакт', loadChildren: «приложение/контакт/контакт. module # ContactModule ' } в forRoot, а затем вы объявляете {path:' ', component: ContactComponent} для дочернего элемента. Это эффективно перезаписывает { путь: '', redirectTo: 'contact', pathMatch: 'full' }, поэтому ваш навигатор не отображается –