(Tested in Angular 11 project)
One trick is to “double” navigate to force components to destroy and “update” their lifecycle.
E.g.:
/// Navigates to detail view
navigateToDetail(id: string) {
// Navigates to start page first to "destroy" detail components if on same url
this.router.navigate(['/']).then(() => {
// Then navigates to desired url
let navigationExtras: NavigationExtras = { queryParams: { 'id': id} };
this.router.navigate(['/view'], navigationExtras);
});
}
I also added this to app-routing.module.ts: (not sure if it makes a difference with the above code)
@NgModule({
imports: [RouterModule.forRoot(routes, {
onSameUrlNavigation: 'reload',
})],
exports: [RouterModule],
})
export class AppRoutingModule {}