2016-05-13 93 views
2

如何在应用程序级别而不是在组件级别利用ngOnDestroy?ngOnDestroy不破坏localStorage标记

我想在用户关闭我的应用程序时执行下面的代码。

ngOnDestroy(): void { 
    localStorage.removeItem('token'); 
} 

我把它改成了AppComponent像这样:

export class AppComponent implements OnDestroy { 
    ngOnDestroy(): void { 
     localStorage.removeItem('token'); 
    } 
} 

OnDestroy似乎并不当应用程序被关闭火。在这种情况下,我使用本地存储中的令牌来确定用户是否已通过检查令牌并重定向到登录页面(如果不存在)来登录。如果在应用程序关闭时令牌没有被销毁,这显然不起作用。

我在哪里可以放置此代码以获得我正在寻找的行为,还是有更好的方法来完成我正在尝试完成的任务?

回答

0

不知道解释的。如果我在这里失去了什么,但你可以使用的sessionStorage,而不是存储您的令牌。 按照Mozilla的文档:

“存储在sessionStorage的数据获取网页会话结束时清零,页面会持续,只要浏览器是开放的,生存在页面重新加载和恢复打开页面中。新的标签或窗口将导致启动一个新的会话......”

1

类似Günter Zöchbauer's suggestion(并使用适当的Angular2结构,以实现它),而不是使用ngOnDestroy,定义了一个侦听器在卸载事件您根组件类,如下所示:

import { Component, HostListener } from '@angular/core'; 

@Component({ /* insert metadata here */ }) 
export class AppComponent { 
    @HostListener('window:unload') 
    private onUnload(): void { 
     localStorage.removeItem('token'); 
    } 
}