As respostas sugeridas aqui, incluindo a resposta aceita do rerezz que sugere a adição de várias entradas de rota, funcionam bem.
No entanto, o componente será recriado ao mudar entre as entradas da rota, ou seja, entre a entrada da rota com o parâmetro e a entrada sem o parâmetro.
Se você quiser evitar isso, pode criar seu próprio correspondente de rotas que corresponderá às duas rotas:
export function userPageMatcher(segments: UrlSegment[]): UrlMatchResult {
if (segments.length > 0 && segments[0].path === 'user') {
if (segments.length === 1) {
return {
consumed: segments,
posParams: {},
};
}
if (segments.length === 2) {
return {
consumed: segments,
posParams: { id: segments[1] },
};
}
return <UrlMatchResult>(null as any);
}
return <UrlMatchResult>(null as any);
}
Em seguida, use o matcher na sua configuração de rota:
const routes: Routes = [
{
matcher: userPageMatcher,
component: User,
}
];