在AngularJs中注销时清除服务中数据的最佳实践

时间:2014-10-23 07:06:01

标签: javascript angularjs

我有几个使用Web服务的服务并缓存了很多结果。通过缓存我的意思是存储在服务的变量中。当用户注销时,应清除数据。 服务如下所示(简化版):

class DataService   {

  private data;

  constructor($http)
  {
     $http.get(url).then((response) => 
       { 
          this.data = response.data;
       });
  }

}

哪个是打字稿,但可以解决这个问题:

var DataService = (function () {
    function DataService($http) {
        var _this = this;
        $http.get(url).then(function (response) {
            _this.data = response.data;
        });
    }
    return DataService;
})();

我可以使用This Question中的答案清除数据 这是做这样的事情:

$rootScope.on('logout',function(){
  this.data = [];
});

然而,当我们有多个服务和控制器时,这是很多代码。我们都知道这个新人会在服务中添加一些新数据,并忘记将其添加到注销序列中。这简直是​​一种不好的做法。

类似地,数据存储在应用程序各个部分的$ scope中,这也必须清除。 范围相当简单,因为控制器的构造函数在每次页面访问时加载,然后将覆盖数据。

一个提议的解决方案是刷新,但这会给用户带来可怕的体验。

一种解决方案可能是让角度相信从未创建过服务或完全重新加载角度。

最好的方法是什么?将数据存储在服务变量中是不是很糟糕?

2 个答案:

答案 0 :(得分:9)

您可以创建一个负责清除其他服务中所有数据的服务。在这种情况下,您只需要调用此服务的“clear”方法,并在此服务中实现单独的clear调用(因此只实现一次)。

这也为您提供了一个优势,即您可以随时了解哪些服务数据需要清除,因为将来可能会有例外。

另请参阅此答案以供参考:Injecting a service into another service in angularJS

答案 1 :(得分:4)

您可以使用整页刷新:

$window.location.reload();

这将重新启动应用程序的整个状态

另一个解决方案可能是将所有内容存储在会话存储中,然后在注销时清除它:

sessionStorage.clear();