Пользовательское сопоставление маршрутизатора по всему URL в Angular - PullRequest
0 голосов
/ 22 октября 2019

У меня есть старое приложение с URL, отформатированным таким образом

localhost/#segment=12

Мне нужно перехватить их в новом приложении (angular 7) и перенаправить на

segment/:id

Действительно хотелmatcher + перенаправление в маршрутах на работу, но matcher принимает UrlSegment, а не весь url, поэтому все, что я получаю, это пустой массив для работы.

Попробовал перехватить все и перенаправить в контроллере, но идентификатор потерян.

Маршрутизатор malformedUriErrorHandler не запускается.

Закончились идеи.

Ответы [ 2 ]

0 голосов
/ 22 октября 2019

Получил работу, используя средства сравнения маршрутов и window.location. Улучшения?

const appRoutes: Routes = [
  { matcher: mySegmentMatcher, redirectTo: 'segment/:id' },
  { path: 'segment/:id', component: SegmentComponent },
];

function mySegmentMatcher(url: UrlSegment[]) {
  const test = /#segment=(\d+)$/.exec(location.href);
  if(test && test[1]) {
    const id = test[1];
    url = [new UrlSegment('segment', {} )];
    return { 
      consumed: url,
      posParams: {'id': new UrlSegment(id, {}) }
    }
  }
  return null; 
}
0 голосов
/ 22 октября 2019

Попробуйте

import { Router, NavigationStart } from '@angular/router';

constructor(private router: Router) {
router.events.subscribe((event) => {
   if(event instanceof NavigationStart) {
    {
       if(event.url.indexOf('segment')>-1)
     {
        let urlSegment = decodeURIComponent(event.url); 
       //do your split stuff and pass parameters to navigate method
       this.router.navigate(['/segment',12]);
     }
    }
}
});}
...