繁体   English   中英

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

[英]Best practices for Clearing data in services on logout in 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;
})();

我可以使用本课题中的答案清除数据, 这样做是这样的:

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

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

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

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

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

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

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

这样,您还可以了解哪些服务数据需要始终清除,因为将来可能会有例外情况。

另请参阅此答案以供参考: 在angularJS中将服务注入另一个服务

您可以使用整页刷新:

$window.location.reload();

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

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

sessionStorage.clear();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM