У меня проблема с угловыми маршрутами. В моем приложении у меня есть время окончания сеанса входа в систему. Поэтому, когда пользователь не активен в течение 15 минут - приложение попросит его снова войти в систему.
В настоящее время я сохраняю текущий активный URL в магазине и хочу перенаправить пользователя на него после входа в систему. Я делаю это в эффектах с this.router.navigate([backUrl])
.
Проблема в том, что некоторые маршруты с круглыми скобками, например, это http://localhost:4200/somedata/details/3043/edit/(modal:activity/6b9f7a3e-93c9-418f-a172-c2fa648d1be7)
, преобразуется в http://localhost:4200/somedata/details/3043/edit/%28modal:activity/6b9f7a3e-93c9-418f-a172-c2fa648d1be7%29
и на этой странице не распознается маршрутами.
Я пытался использовать CustomUrlSerializer
для решения этой проблемы:
export class CustomUrlSerializer implements UrlSerializer {
private defaultUrlSerializer: DefaultUrlSerializer = new DefaultUrlSerializer();
parse(url: string): UrlTree {
// Encode parentheses
url = url.replace(/\(/g, '%28').replace(/\)/g, '%29');
// Use the default serializer.
return this.defaultUrlSerializer.parse(url);
}
serialize(tree: UrlTree): string {
return this.defaultUrlSerializer.serialize(tree).replace(/%28/g, '(').replace(/%29/g, ')');
}
}
И добавлено в App.module провайдеров { provide: RouterStateSerializer, useClass: CustomRouterStateSerializer },
Но тогда я всегда перенаправлен на страницу NotFound для URL с круглыми скобками, если я пытаюсь открыть их в новом окне браузера или просто обновить страницу. Но это все еще работает для относительных маршрутов. Как из этого URL http://localhost:4200/somedata/details/3043/edit
я могу открыть свой компонент по пути (modal:activity/6b9f7a3e-93c9-418f-a172-c2fa648d1be7)