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 - 样式加载器未在我的 <head> 中加载 css

JavaScript 本地时间打印

javascript - 如何知道jQuery回调函数中有哪些参数,如何理解并添加参数?

javascript - 使用函数简化我的 javascript

javascript - React - 从 API 收到 401 响应后保留表单信息

angularjs - 从 Visual Studio bundle AngularJs TypeScript 应用程序

javascript - 使用 Angular JS 和 Cordova 获取用户 60 秒的位置

javascript - Angularjs 过滤器始终返回 true

javascript - 我如何使用 $scope 和 $watch 使用 angular-fullstack 生成器语法?

javascript - 在 JavaScript (ES6) 中合并数组以形成数组数组