【发布时间】:2014-12-18 19:31:10
【问题描述】:
我有几个使用 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;
})();
我可以使用This Question 中的答案清除数据 它正在做这样的事情:
$rootScope.on('logout',function(){
this.data = [];
});
但是,当我们有多个服务和控制器时,这是很多代码。我们都知道这个新人会向服务添加一些新数据,但他忘记将其添加到注销序列中。这只是一个不好的做法。
同样,数据存储在应用程序各个部分的 $scope 上,这也必须清除。 范围相当简单,因为控制器的构造函数在每次页面访问时加载,然后将覆盖数据。
一种建议的解决方案是进行刷新,但这会带来糟糕的用户体验。
一种解决方案可能是让 Angular 相信服务从未被创建或完全重新加载 Angular。
最好的方法是什么?将数据存储在服务的变量中是不是很糟糕?
【问题讨论】:
-
有趣的问题。您的服务肯定不是所有都依赖于登录用户吗? TypeScript 可以在这里派上用场。你可以定义一个接口,比如
ILoggedInUserService,它公开了一个tearDown()方法。这将迫使开发人员为所有适用的服务实现此方法。然后您可以enumerate 并在注销时执行 -
我通过广播一个事件来处理它,所有相关服务都通过监听该事件来清理它们的数据。这样可以保持代码整洁,没有相互依赖关系。
标签: javascript angularjs