Agora isso pode ser feito no Angular 5.1 usando a onSameUrlNavigation
propriedade de configuração do roteador.
Eu adicionei um blog explicando como aqui, mas a essência é a seguinte
https://medium.com/engineering-on-the-incline/reloading-current-route-on-click-angular-5-1a1bfc740ab2
Na onSameUrlNavigation
opção de configuração do roteador , defina-a como 'reload'
. Isso faz com que o roteador inicie um ciclo de eventos quando você tenta navegar para uma rota que já está ativa.
@ngModule({
imports: [RouterModule.forRoot(routes, {onSameUrlNavigation: 'reload'})],
exports: [RouterModule],
})
Nas definições de rota, defina runGuardsAndResolvers
como always
. Isso instruirá o roteador a sempre iniciar os ciclos de guardas e resolvedores, disparando eventos associados.
export const routes: Routes = [
{
path: 'invites',
component: InviteComponent,
children: [
{
path: '',
loadChildren: './pages/invites/invites.module#InvitesModule',
},
],
canActivate: [AuthenticationGuard],
runGuardsAndResolvers: 'always',
}
]
Finalmente, em cada componente que você deseja ativar o recarregamento, você precisa manipular os eventos. Isso pode ser feito importando o roteador, vinculando-se aos eventos e chamando um método de inicialização que redefine o estado do seu componente e busca novamente os dados, se necessário.
export class InviteComponent implements OnInit, OnDestroy {
navigationSubscription;
constructor(
// … your declarations here
private router: Router,
) {
// subscribe to the router events. Store the subscription so we can
// unsubscribe later.
this.navigationSubscription = this.router.events.subscribe((e: any) => {
// If it is a NavigationEnd event re-initalise the component
if (e instanceof NavigationEnd) {
this.initialiseInvites();
}
});
}
initialiseInvites() {
// Set default values and re-fetch any data you need.
}
ngOnDestroy() {
if (this.navigationSubscription) {
this.navigationSubscription.unsubscribe();
}
}
}
Com todas essas etapas, você deve ter o recarregamento de rota ativado.