С Angular Router, есть ли способ переназначить старые параметры запроса маршрута на новые?
Я конвертирую приложение Angular 1.5 в Angular 4, это приложение имеет давнюю историю, поэтому существует несколько URL-адресов, которые были перенаправлены. Одна из этих страниц - наша страница поиска, где параметры запроса определяют, что искать.
С помощью ui-router в AngularJS у нас было перенаправление маршрута, которое выглядело так (упрощенно для примера):
$urlRouterProvider.when('/search?text_query', ['$match', ($match) => {
const params = [];
if ($match.text_query) {
params.push('text=' + $match.text_query);
}
return '/curriculumLibrary?' + params.join('&');
}]);
Наша проблема в том, что встроенный маршрутизатор для современного Angular просто передает параметры запроса; это не волнует, как они выглядят. Мое решение до сих пор состоит в том, чтобы повторно нанести на карту и перенаправить после того, как маршрут был закончен. Вот как это выглядит в компоненте верхнего уровня:
public ngOnInit() {
this.route.queryParamMap.subscribe((params) => {
if (typeof params.text_query !== 'undefined') {
this.router.navigate(['.'], {
queryParams: { text: params.text_query },
relativeTo: this.route
})
}
});
}
Мы должны перенаправить маршрут, потому что нам нужно изменить URL-адрес, чтобы отразить правильную структуру URL (мы хотим, чтобы эти маршруты перестали использоваться).
Есть ли способ выполнить такой тип переопределения запросов в Resolver, Guard или где-либо еще на уровне кода разрешения URL-адресов? С другой стороны, по мнению Angular, параметры запроса должны пониматься только теми компонентами, где они используются?