Вопрос, связанный с вопросом this, У меня проблема с вложенными маршрутами в версии Release Candidate для маршрутизатора Angular2.Угловой2 Новый (RC1) Маршрутизатор, вложенный маршрутизатор-выход навигация
В настоящее время у меня есть приложение, установить с определениями маршрутов следующим
в ИПВ/клиент/приложение/app.component.ts
@Routes([ // some other routes up here { path: '/', component: HomeComponent } { path: '/admin', component: AdminComponent } ])
в ИПВ/клиент/приложение /+admin/admin.component.ts
@Routes([ // some other routes up here { path: '/dashboard', component: DashboardComponent }, ])
Следует отметить, что как AppComponent, так и AdminComponent используют <router-outlet>
. Когда вы посещаете /admin/dashboard
, вы вложены в маршрутизатор-выход AdminComponent, который живет в маршрутизаторе-выходе AppComponent
Поскольку я работаю в разделе admin, я хочу, чтобы там была проверка разрешения, когда какой-либо маршрут начиная с /admin
. Если у пользователя нет соответствующих разрешений, они перемещаются на домашнюю страницу. В настоящее время, как я пытаюсь сделать это
в SRC/клиент/приложение/+ администратора/admin.component.ts
ngOnInit(): void { if (the user does not have the right permissions) { this.router.navigate(['/']); } }
Это переходит к корню приложения , но выдает ошибку из шаблона AdminComponent, потому что он пытается построить routerLink
для другого маршрута в AdminComponent. Моя догадка в том, что хотя путь правильный, я все еще в <router-outlet>
, который живет в AdminComponent. Как-то это может быть связано с тем, что новый маршрутизатор хочет относительные пути. Я не уверен, как перейти к корню приложения и загрузить компоненты в правильную розетку маршрутизатора. Я предполагаю, что это то, что можно решить с помощью router.parent
в старом маршрутизаторе angular2, но поскольку это недоступно, мне нужно другое решение.
вот ошибка, которая входит в систему на консоли.
TypeError: Cannot read property 'map' of null
at UrlTree.Tree.pathFromRoot (segments.ts:32)
at _findUrlSegment (link.ts:87)
at _findStartingNode (link.ts:98)
at Object.link (link.ts:19)
at Router.createUrlTree (router.ts:145)
at RouterLink._updateTargetUrlAndHref (router_link.ts:55)
at RouterLink.Object.defineProperty.set [as routerLink] (router_link.ts:43)
at DebugAppView._View_AdminComponent0.detectChangesInternal (AdminComponent.template.js:247)
at DebugAppView.AppView.detectChanges (view.ts:243)
at DebugAppView.detectChanges (view.ts:345)
UPDATE
Ранее routerLink
s в AdminComponent шаблоне были относительные пути, то есть
<a [routerLink]="['dashboard']" title="Dashboard">Dashboard</a>
Изменение их абсолютные пути, казалось, избавиться от ошибок и правильно ориентироваться в корневой маршрут. Сейчас:
<a [routerLink]="['/admin/dashboard']" title="Dashboard">Dashboard</a>
Итак, ваш UPDATE является решением? – nadav
Да, ссылки маршрутизатора основаны на URL, а не на основе маршрута. Для получения дополнительной информации посетите http://victorsavkin.com/post/145672529346/angular-router, в частности, RouterLink - Подробнее о разделе синтаксиса @nadav –