5

の回答と同様に、サービスにデータを保存しようとしています:

サービスで $http 応答を処理中

app.factory('myService', function($http) {
  var 約束;
  var myService = {
    非同期:関数(){
      もし (!約束) {
        // $http は promise を返す then 関数を持つ promise を返します。
        promise = $http.get('test.json').then(関数 (応答) {
          // then 関数は、応答を変更する機会です
          console.log(応答);
          // 戻り値はコントローラの then によって取得されます。
          response.data を返します。
        });
      }
      // プロミスをコントローラーに返す
      約束を返す;
    }
  };
  myService を返します。
});

app.controller('MainCtrl', function( myService,$scope) {
  $scope.clearData = 関数() {
    $scope.data = {};
  };
  $scope.getData = function() {
    // 非同期メソッドを呼び出してから、独自の then 関数内で返されたものを処理します
    myService.async().then(関数(d) {
      $scope.data = d;
    });
  };
});

ただし、ログアウト後もサービスのデータが保持されていることに気付きました。したがって、まったく別のユーザーとしてログインして、表示されるべきではないデータを表示することができました。

ログアウト後にデータを消去するにはどうすればよいですか? もちろん、すべてのサービスのすべてを手動でクリアすることもできますが、「すべてのユーザー データをクリアする」などのより一般的なアプローチを探しています。ページを強制的に更新しようとしましたが、うまくいきましたが、生成されるフラッシュが気に入りません。

編集:例のコード

4

2 に答える 2

0

myService のデータをクリアするには、$scope.clearData で呼び出される destroy() 関数を使用できます。例えば:

app.factory('myService',function('$http'){
   /// do you stuff
   return{
     myServices : //...,
     destroy : function(){
       promise = null;//destroy promise
     }
   }
});

余談ですが、おそらく $scope にデータを保存したくないでしょう。制御とデータを分離したい場合があります。

于 2015-02-17T05:43:39.073 に答える
0

angular-devise を使用してユーザーを管理しています。ログアウト時にデータをクリアするためにサービスにあるものは次のとおりです。

app.service("MyService", ["$rootScope", function($rootScope) {
  // destroy the user data on logout
  self = this;
  this.shouldBeDestroyed = "foo";

  $rootScope.$on('devise:logout', function(event) {
    self.shouldBeDestroyed = null;
  });
});

サービス内の機密オブジェクトを破棄するためのより信頼できる方法を見つけたいと思っています。これは私の問題を解決しました。

于 2016-08-15T16:16:36.683 に答える