当用户登录到我的网站的主页时,我通常会在主页上加载大量数据。比他们到达页面上的特定网址时要多得多。当他们访问ome页面时,实际上满足了我在访问特定页面时分别获取的许多数据的数据请求。
我喜欢$ http模块与$ cache一起工作的方式,并且我想利用我的首页命中的知识来填充我知道单个页面将进行的调用的缓存。
也就是说,作为示例,我的主页调用/ rest / clients,它返回所有客户端,而单个页面调用/ rest / client / 101。我想做的是使它成为一个名字,如果首先调用/ rest / clients,则不必再调用/ rest / client / 101时,就不必进行新的xhr调用,而是可以从缓存中获取数据,如下所示:如果/ rest / client / 101已经被调用。
我以前从未做过装饰器,但我想也许是$ http服务上的装饰器?我查看了$ http代码,似乎缓存存储在实际http调用的关闭位置,并且仅在下一个Get时才公开。
有没有人做过这个或类似的?我找不到。任何特定的伪编码建议将非常受欢迎。
在数据服务中,您有2种方法,getAll和getOne。
在服务中,定义对您的getAll结果promise的引用。
然后在您的getOne服务中检查该承诺是否存在,以及是否使用它来滤除满足getOne需求所需的一项。
module.service('dataService', function($http){
var getAllPromise = null;
this.getAll = function(){
if (getAllPromise !== null){
getAllPromise;
}
getAllPromise = $http.get('clients');
return getAllPromise
};
this.getOne = function(id){
if (getAllPromise !== null){
return getAllPromise
.then(function(allData){
//logic here to find the one in the full result set
return theFoundItem;
};
}
return $http.get('clients/' + id);
};
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句