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 - 如何让hubot列出当前篝火聊天室中的所有用户?

javascript - Angular - 来自提供商的未知提供商

javascript - 如果还调用了 $doChanges,$doCheck 如何不会产生任何影响?

html - 在 AngularJS 的 ng-repeat 循环中显示特定元素的 div

javascript - 在每个页面更改/请求时实例化的 Angular 服务

javascript - 我应该如何在我的代码中使用 setInterval()

javascript - Nivo Slider 无法正常工作

javascript - 单击单选按钮后如何自动添加颜色?

javascript - Windows Phone 7 上的 window.open

javascript - Angularjs 输入类型 = 文件不控制台数据