Điều này bây giờ có thể được thực hiện trong Angular 5.1 bằng cách sử dụng thuộc onSameUrlNavigation
tính của cấu hình Bộ định tuyến.
Tôi đã thêm một blog giải thích làm thế nào ở đây nhưng ý chính của nó là như sau
https://medium.com/engineering-on-the-incline/reloading-civerse-route-on-click-angular-5-1a1bfc740ab2
Trong onSameUrlNavigation
tùy chọn cho phép cấu hình bộ định tuyến của bạn , đặt nó thành 'reload'
. Điều này khiến Bộ định tuyến kích hoạt chu kỳ sự kiện khi bạn cố điều hướng đến tuyến đường đang hoạt động.
@ngModule({
imports: [RouterModule.forRoot(routes, {onSameUrlNavigation: 'reload'})],
exports: [RouterModule],
})
Trong định nghĩa tuyến đường của bạn, đặt runGuardsAndResolvers
thành always
. Điều này sẽ cho bộ định tuyến luôn khởi động các vệ sĩ và giải quyết các chu kỳ, bắn các sự kiện liên quan.
export const routes: Routes = [
{
path: 'invites',
component: InviteComponent,
children: [
{
path: '',
loadChildren: './pages/invites/invites.module#InvitesModule',
},
],
canActivate: [AuthenticationGuard],
runGuardsAndResolvers: 'always',
}
]
Cuối cùng, trong mỗi thành phần mà bạn muốn kích hoạt tải lại, bạn cần xử lý các sự kiện. Điều này có thể được thực hiện bằng cách nhập bộ định tuyến, liên kết với các sự kiện và gọi một phương thức khởi tạo để đặt lại trạng thái của thành phần của bạn và tìm nạp lại dữ liệu nếu cần.
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();
}
}
}
Với tất cả các bước này, bạn nên kích hoạt tải lại tuyến đường.