我有几个使用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。
做这个的最好方式是什么?将数据存储在服务的变量中是否不好?
您可以创建一个服务,负责从其他服务中清除所有数据。在这种情况下,您只需要调用clear此服务的“ ”方法,并在此服务内实现单个清除调用即可(因此仅实现一次)。
clear
这也给您带来的好处是,由于将来可能会有例外,因此您可以始终了解需要始终清除哪些服务数据。