4

私のコントローラーでは、データを保存して$scope.$parent.dossierSummaries = data; いますが、ログアウトしてログインした後、アプリケーション$scope.$parent.dossierSummariesは同じ古いデータを保持します。

私はログアウト時にこれをやっています

.success( function( response, status ) {
    if ( response.status > 0 ) {
        var u = $rootScope.user.username;
        $cookieStore.remove('myapp');
        $rootScope.user = { username: '', role: 0 };
        success(u);
    }
    else {
        error(response.messages);
    }
})
.error( function( response, status ) {
    error(['There was an error logging you out.']);
});
4

5 に答える 5

3

angularJS では、変数をコントローラーに直接設定するべきではありませんが、代わりにサービスから取得する必要があります。したがって、コントローラーをロードするときはいつでもinit()、そのモデルの値を取得する関数を作成する必要があります。したがって、常にサーバーから正しいデータを取得できます。

コード例とドキュメント: http://docs.angularjs.org/guide/dev_guide.services.creating_services

于 2013-08-29T11:43:37.630 に答える
2

ログアウト時に画面がちらつくことを気にしない場合は、次のような方法でページを更新できます。

$window.location.replace($window.location.toString().split('#')[0]);

$scopeこれにより、すべての変数と変数がクリアされ$rootScope、私の場合は問題が解決しました。

于 2016-06-09T21:11:11.897 に答える
2

それを達成するための効果的な方法はないと思います。任意のオブジェクト (コントローラー、ディレクティブ、フィルター、または実際には任意の js オブジェクト) は、別のオブジェクト (この場合はユーザー) への参照を保持できます。

参照は、明示的に行うか、オブジェクト所有者が参照を破棄した場合にのみ解放されます。

あなたが試すことができるのは

$rootScope.user.username='';
$rootScope.role=0; 

何らかのオブジェクトがこの特定のオブジェクトを追跡していると仮定すると、データはすぐに消去されます。

于 2013-08-29T11:56:13.607 に答える
0

$scope をクリアしたい場合は、そのコンストラクターメソッドか、コンストラクターで使用するproto (プロトタイプ) を使用できると思います。スコープを初期状態にリセットするためにそれを行うことができると思います。誰かがこれについてさらに知っている場合は、遠慮なくコメントしてください。

于 2014-08-01T20:40:49.893 に答える