【问题标题】:Clear service data in AngularJs在 AngularJs 中清除服务数据
【发布时间】:2014-06-21 19:58:47
【问题描述】:

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

Processing $http response in service

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; }); }; });

但是,我注意到我的服务中的数据即使在注销后仍然存在。因此,我可以以完全不同的用户身份登录并查看我不应该看到的数据。

注销后如何清除数据?当然,我可以手动清除所有服务中的所有内容,但我正在寻找更通用的方法,例如“清除所有用户数据”。我试图强制刷新页面,它可以工作,但我不喜欢它产生的闪存。

编辑:示例代码

【问题讨论】:

  • 如何究竟“相似”呢? (即显示你的代码)如果你做得对,你真的不应该在服务中有任何持久性数据。
  • 你能分享你的服务代码吗?
  • 我应该重新表述我的问题,注销是指我自己的注销功能,它只是删除了一些用户数据。服务仍然被实例化,并且包含与注销之前相同的内容。
  • 您引用的示例不保存数据。你是如何保存数据的?通过缓存?在服务上的 var 中?
  • 作为服务上的承诺/变量,我会将示例中的代码添加到问题中。

标签: angularjs logout angular-seed


【解决方案1】:

要清除 myService 中的数据,您可能需要在 $scope.clearData 上调用 destroy() 函数。 例如:

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

附带说明,您可能不想将数据存储在 $scope 中。您可能希望将控制和数据分开。

【讨论】:

    【解决方案2】:

    我正在使用 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-11-16
      • 2014-12-18
      • 2017-08-13
      • 1970-01-01
      • 2017-06-25
      • 1970-01-01
      • 2015-10-07
      • 1970-01-01
      • 2012-04-03
      相关资源
      最近更新 更多