2016-05-13 16 views
2

ngOnDestroyをコンポーネントレベルではなくアプリケーションレベルでどのように活用できますか?ngOnDestroyはローカルストレージトークンを破棄しません

ユーザーがアプリケーションを閉じるときに次のコードを実行します。

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

私はそうのようAppComponentにそれを置く:

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

OnDestroyは、アプリケーションが閉じられたときに起動していないようです。この場合、トークンをチェックし、ログインページが存在しなければリダイレクトすることによって、ユーザーがログインしているかどうかを判断するために、ローカルストレージ内のトークンを使用しています。アプリケーションが閉じられたときにトークンが破棄されない場合、これは明らかに機能しません。

私が探している行動を得るためにこのコードを配置することができますか、達成しようとしていることを達成するためのよりよい方法がありますか?

答えて

0

私はここで何かが不足しているか分かりませんが、代わりにトークンを保存するためにsessionStorageを使用することができます。 mozillaのドキュメントを1として :

は「のsessionStorageに格納されたデータは、ときにページのセッションが終了クリアされますページのセッションは限りブラウザが開いていて、ページのリロードとリストアの上に生き残るとして持続する中でページを開きます。代わりにngOnDestroyを使用するのではなく、新しいタブまたはウィンドウが開始される新しいセッションの原因になります...」

1
Günter Zöchbauer's suggestionと同様に

(および適切なAngular2を使用して、それを達成するために構築)、あなたの中にアンロードイベントのリスナーを定義しますこのようなルートコンポーネントクラス:

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

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