2016-05-23 5 views
2

Вопрос, связанный с вопросом 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> 
+0

Итак, ваш UPDATE является решением? – nadav

+0

Да, ссылки маршрутизатора основаны на URL, а не на основе маршрута. Для получения дополнительной информации посетите http://victorsavkin.com/post/145672529346/angular-router, в частности, RouterLink - Подробнее о разделе синтаксиса @nadav –

ответ

0

сообщение об ошибке указывает на то, что именно этот вопрос https://github.com/angular/angular/issues/8567 вы работаете в.

Я также не вижу маршрут /, сконфигурированный в коде, который вы указали в своем вопросе, который используется this.router.navigate(['/']);.

+0

Я определил ''/''как маршрут в AppComponent, я просто не сделал этого, t включить его в мой пример. Я обновляю свой вопрос, чтобы это отразить. Я согласен с вашим комментарием в этой проблеме, потому что я не создаю маршруты с помощью '* ngFor' –

+0

Не могли бы вы попытаться переместить маршрут'/'под маршрутом'/admin'? –

+1

создание «routerLinks» в абсолютных путях AdminComponent, похоже, сработало. См. Обновление выше –

Смежные вопросы