Именованный маршрутизатор Angular2 не работает

#angular #angular2-routing

#angular #angular2-маршрутизация

Вопрос:

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

в панели управления выше, в настоящее время нажатие на страницу 1 или Страницу 2 в меню загружает содержимое в безымянный выход маршрутизатора. Как мне загрузить их в именованный выход маршрутизатора (contentOutlet)?

я попытался добавить следующее, но это прерывает страницу

в app.module.ts

 { path: 'Page1', component: Page1Component, outlet:'contentOutlet'},

{ path: 'Page2', component: Page2Component, outlet:'contentOutlet'}
  

Ответ №1:

Проблема этого кода

 { path: '', redirectTo: 'Page1', pathMatch: 'full'},
{ path: 'Page1', component: Page1Component, outlet="contentOutlet"},
{ path: 'Page2', component: Page2Component, outlet="contentOutlet"}`
  

заключается в том, что вы не можете загрузить, например, страницу 1 в именованный выход, потому что вам нужно загрузить ровно один компонент в неназванный router-outlet . Этот выход не должен быть пустым. Если вы перенаправляете корневой путь '' непосредственно к компоненту, который хотите загрузить в другой выход, то для неназванного компонента не будет router-outlet доступного компонента.

Итак, вы должны создать родительский компонент для, Pages который всегда загружается в неназванный router-outlet , вот так:

 { path: '', component: PagesComponent, pathMatch: 'full'},
{ path: 'Page1', component: Page1Component, outlet: 'contentOutlet'},
{ path: 'Page2', component: Page2Component, outlet: 'contentOutlet'}
  

Ваши розетки остаются в AppComponent .

Если вы хотите загрузить Page1 в contentOutlet , вы должны сделать это следующим образом из шаблона AppComponent :

 <a [routerLink]="['/', {outlets: {'contentOutlet': 'Page1' }}]" routerLinkActive="active" >Page1</a>
  

Итак, теперь маршрутизатор распознает, что в / корневом пути вашего приложения должен быть выход с именем contentOutlet . И он загружает Page1 -компонент в розетку.

Вот исправленный плунжер: https://plnkr.co/edit/MXi8p7rr15Bul1US9qbc?p=preview

Комментарии:

1. Это довольно запутанно, вы рекомендуете какой-нибудь учебник или ссылку для чтения по этому поводу? Я обновил плунжер для загрузки меню в левом столбце. Теперь, когда я нажимаю меню Page1child1, я хочу отобразить содержимое этой страницы на странице содержимого, что мне нужно сделать дополнительно здесь. Вроде как нужна навигация, как на sears.com. 1) Нажмите на меню в заголовке, и оно обновит подменю слева 2) нажмите на подменю слева, и оно загрузит содержимое в правую часть

2. Эта статья может быть очень полезной для доступа к именованным выходам маршрутизатора.

3. Спасибо за помощь здесь. Я немного сбит с толку. Похоже, суть вашего решения заключается в добавлении '/' , то есть изменении {outlets: {'contentOutlet': 'Page2' }} на '/', {outlets: {'contentOutlet': 'Page2' }} . Однако я открыл ваш plunk, и он работает в обоих направлениях. Я изучаю эту демонстрацию , в которой маршрут заполняет только именованный «всплывающий» выход. Это работает в демо-версии, но не при моем внедрении этого в более крупное приложение.