Ini sekarang dapat dilakukan di Angular 5.1 menggunakan onSameUrlNavigation
properti konfigurasi Router.
Saya telah menambahkan sebuah blog yang menjelaskan bagaimana di sini tetapi intinya adalah sebagai berikut
https://medium.com/engineering-on-the-incline/reloading-current-route-on-click-angular-5-1a1bfc740ab2
Di onSameUrlNavigation
opsi mengaktifkan konfigurasi router Anda , atur ke 'reload'
. Hal ini menyebabkan Router mengaktifkan siklus peristiwa saat Anda mencoba menavigasi ke rute yang sudah aktif.
@ngModule({
imports: [RouterModule.forRoot(routes, {onSameUrlNavigation: 'reload'})],
exports: [RouterModule],
})
Dalam definisi rute Anda, setel runGuardsAndResolvers
ke always
. Ini akan memberi tahu router untuk selalu memulai siklus penjaga dan resolver, menjalankan peristiwa terkait.
export const routes: Routes = [
{
path: 'invites',
component: InviteComponent,
children: [
{
path: '',
loadChildren: './pages/invites/invites.module#InvitesModule',
},
],
canActivate: [AuthenticationGuard],
runGuardsAndResolvers: 'always',
}
]
Terakhir, di setiap komponen yang ingin Anda aktifkan pemuatan ulang, Anda perlu menangani kejadian tersebut. Ini dapat dilakukan dengan mengimpor router, mengikat kejadian dan menjalankan metode inisialisasi yang menyetel ulang status komponen Anda dan mengambil ulang data jika diperlukan.
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();
}
}
}
Dengan semua langkah ini di tempat, Anda harus mengaktifkan pemuatan ulang rute.