我有一个多页面Angular 4应用程序 .

该应用程序的主页订阅了多个Observables来呈现一些东西 .

我正在存储所有订阅句柄并在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();
    }
});`