すべてをクリアする必要があります$scope
一部の操作の実行中の値。
例:クリックした場合"Signout"
リダイレクトするボタン"signin"
ページの場合、セッション内のすべての$ scopeまたは$ rootScope値をクリアする必要があります。
どうすればこれを達成できますか?
次のことができます。
$rootScope = $rootScope.$new(true);
$scope = $scope.$new(true);
関数 $new
は、親から変数を継承する新しいスコープを作成しています。 true
は継承を防ぎます。
しかし、これは正しいアプローチではありません。上記のものを使用する場合、bootstrapコントローラの機能を手動で実行し、スコープのツリーを再作成する必要があるためです。
これ は便利かもしれませんが、初期化されたデータをいくつかの変数に格納し、割り当てられたときに表示された変数にコピーを格納するという考え方です。
正しい解決策は、次のように、ログアウトイベントの各スコープのすべてのプロパティを手動でクリアすることです。ログアウトイベント:
$rootScope.$broadcast("logout");
イベントをキャッチ:
$rootScope.$on("logout", function(){
$rootScope.myData = undefined;
});
または、コメントで提案されているように、サービスを使用してからクリーンアップされます。
You not want delete scope
var authScope =['authLogo','currentPath','pageTitle','app'];
for (var prop in $rootScope) {
if (prop.substring(0,1) !== '$') {
if(authScope.indexOf(prop) ==-1)
delete $rootScope[prop];
}
}