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

标签 javascript angularjs

我有几个使用网络服务并缓存大量结果的服务。缓存是指存储在服务的变量中。当用户注销时,数据应该被清除。 服务如下所示(简化版):

class DataService   {

  private data;

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

这是 typescript ,但解析为这样的东西:

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 = [];
});

但是,当我们有多个服务和 Controller 时,这会是很多代码。我们都知道这个新人会向服务添加一些新数据,但他忘记将其添加到注销序列中。这只是一种不好的做法。

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

一个建议的解决方案是进行刷新,但这会带来糟糕的用户体验。

一个解决方案可能是让 Angular 相信服务从未被创建或完全重新加载 Angular。

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

最佳答案

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

这还为您提供了一个优势,即您可以随时了解哪些服务数据需要清除,因为您将来可能会遇到异常。

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

关于javascript - 在 AngularJs 中注销时清除服务中数据的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26522875/

相关文章:

javascript - 输入数字输入后 Angular ng-model 不更新

javascript - 我怎样才能按原样打印页面

javascript - HTML 语义 - 充当 anchor 的按钮

javascript - 我如何检测 ngShow DOM 更改是否已完成?

angularjs - 为什么我无法在 AngularJS 的 mdDialog Controller 中访问 `this` 的属性?

javascript - 如何在转换期间更改参数值?

javascript - 从 Box3 创建 BoxBufferGeometry

javascript - 如何创建一个选择另一个对象并在浏览器中刷新的函数

javascript - Javascript-即时串流音频(Web Audio API和XHR)

javascript - 如何让 Controller 函数在 AngularJS 中只执行一次?