我有一个多页面的Angular 4应用程序。
该应用程序的主页订阅了多个Observable来呈现一些内容。
我正在存储所有订阅句柄并在ngOnDestroy中取消订阅它们。理想情况下,当我们离开此页面时,此页面上的组件应该被销毁,应该调用ngOnDestroy,并且所有待处理的订阅都将被取消。
问题是当我导航到另一个页面时,在所有挂起的订阅都发出值之前,不会触发ngOnDestroy。
有趣的是,它只是第一次发生。如果我回到主页并再次转到上一页,那么再次启动的待定订阅会立即取消。
在每个页面/组件的ngOnInit和ngOnDestroy中添加consloe.log以确认流程。
不幸的是,代码太过涉及为它添加一个plunkr。只是想与社区核实是否有人看到过这种行为并知道原因。
PS:我确实有解决此问题的方法。我正在订阅路由器事件并使用NavigationStart取消订阅(如下所示),但我不想将其添加到我的每个组件中。
`this.router.events.subscribe((event: any): void => {
if (event instanceof NavigationStart) {
this.dataSub && this.dataSub.unsubscribe();
}
});`