路由器配置:
imports: [
RouterModule.forRoot(routes, {
onSameUrlNavigation: 'reload',
scrollPositionRestoration: 'top'
})
],
我的路线:
{
path: 'orders',
loadChildren: './modules/order/order.module#OrderModule',
canLoad: [OrderGuard],
runGuardsAndResolvers: 'always'
},
然后在我的后代中:
{
path: 'new-order',
component: NewOrderComponent,
pathMatch: 'full',
canActivate: [OrderGuard],
runGuardsAndResolvers: 'always'
},
在我的实际组件中:
this.routerSubscription = this.router.events.subscribe(event => {
console.log('NAVIGATION EVENT', event);
if (event instanceof NavigationEnd) {
console.log('NAVIGATION END');
this.ngOnDestroy();
this.initializeComponent();
}
});
尝试重新激活同一路由后,不会触发任何事件。不过,确实会在初始激活时显示事件。
编辑:守卫确实被触发了。
编辑:我的ngOnDestroy代码弄乱了事情:
if (this.routerSubscription) {
this.routerSubscription.unsubscribe();
}
答案 0 :(得分:1)
不幸的是,onSameUrlNavigation
仅执行守护程序和解析程序,并且不重新初始化组件。
一个很好的部分是它确实会触发导航,因此您有2种方法可以遵循
您可以使用Events
中的RouterModule
来处理
constructor(private _router: Router) {}
ngOnInit() {
this._router.events.subscribe(res => {
if (res instanceof NavigationEnd) console.log("NavigationEnd Event");
});
}
OR
您可以在路由器导航方法中传递随机数,然后订阅该参数以执行逻辑
https://stackblitz.com/edit/angular-route-reload上的Stackblitz
修改:
正如我在评论中所指出的那样,似乎ngOnDestroy
方法中发生了一些事情,并且似乎您在调用ngOnDestroy
时可能正在取消订阅路由事件。小提琴已更新以显示这种情况。
这不仅会执行一次路由事件。