5

我正在尝试将数据存储在我的服务中,类似于以下答案:

在服务中处理 $http 响应

app.factory('myService', function($http) {
  变种承诺;
  变量我的服务 = {
    异步:函数(){
      如果(!承诺){
        // $http 返回一个promise,它有一个then函数,它也返回一个promise
        promise = $http.get('test.json').then(function (response) {
          // 这里的then函数是修改响应的机会
          控制台日志(响应);
          // 返回值由控制器中的 then 获取。
          返回响应。数据;
        });
      }
      // 将承诺返回给控制器
      回报承诺;
    }
  };
  返回我的服务;
});

app.controller('MainCtrl', function(myService,$scope) {
  $scope.clearData = 函数() {
    $scope.data = {};
  };
  $scope.getData = 函数() {
    // 调用异步方法,然后处理我们自己的 then 函数中返回的内容
    myService.async().then(function(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 回答