ตอนนี้สามารถทำได้ใน Angular 5.1 โดยใช้onSameUrlNavigation
คุณสมบัติของการกำหนดค่าเราเตอร์
ฉันได้เพิ่มบล็อกที่อธิบายถึงวิธีการที่นี่ แต่ส่วนสำคัญของมันมีดังนี้
https://medium.com/engineering-on-the-incline/reloading-current-route-on-click-angular-5-1a1bfc740ab2
ในการตั้งค่าเราเตอร์ของคุณเปิดใช้งานตัวเลือกการตั้งค่าให้onSameUrlNavigation
'reload'
สิ่งนี้ทำให้เราเตอร์เริ่มวงจรเหตุการณ์เมื่อคุณพยายามนำทางไปยังเส้นทางที่ใช้งานอยู่แล้ว
@ngModule({
imports: [RouterModule.forRoot(routes, {onSameUrlNavigation: 'reload'})],
exports: [RouterModule],
})
ในคำจำกัดความเส้นทางของคุณตั้งค่าการrunGuardsAndResolvers
always
สิ่งนี้จะบอกให้เราเตอร์เริ่มการทำงานของยามและวงจรรีโซลเวอร์เสมอโดยจะเริ่มต้นเหตุการณ์ที่เกี่ยวข้อง
export const routes: Routes = [
{
path: 'invites',
component: InviteComponent,
children: [
{
path: '',
loadChildren: './pages/invites/invites.module#InvitesModule',
},
],
canActivate: [AuthenticationGuard],
runGuardsAndResolvers: 'always',
}
]
สุดท้ายในแต่ละองค์ประกอบที่คุณต้องการเปิดใช้งานการโหลดซ้ำคุณจะต้องจัดการกับเหตุการณ์นั้น ๆ ซึ่งสามารถทำได้โดยการนำเข้าเราเตอร์เชื่อมโยงกับเหตุการณ์และเรียกใช้วิธีการเริ่มต้นที่รีเซ็ตสถานะของส่วนประกอบของคุณและดึงข้อมูลใหม่หากจำเป็น
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();
}
}
}
เมื่อทำตามขั้นตอนเหล่านี้แล้วคุณควรเปิดใช้งานการโหลดเส้นทางใหม่