一尘不染

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

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中应用程序的各个部分,也必须清除该数据。范围非常简单,因为控制器的构造函数在每次页面访问时都会加载,然后将覆盖数据。

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

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

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


阅读 239

收藏
2020-07-04

共1个答案

一尘不染

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

这也给您带来的好处是,由于将来可能会有例外,因此您可以始终了解需要始终清除哪些服务数据。

2020-07-04