尝试激活同一路由时,Angular 8路由器不会使用onSameUrlNavigation:'reload'触发任何事件

时间:2019-10-02 13:36:27

标签: angular angular-routing

路由器配置:

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();
    }

1 个答案:

答案 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时可能正在取消订阅路由事件。小提琴已更新以显示这种情况。

这不仅会执行一次路由事件。