我的previous question突出显示了我服务中的缓存功能。
撰写本文时documentation for ngResource( v1.3.0-build.2417(快照))显示cache
标志。
然而,只有在第一次调用service.get(id)
后才会填充缓存。我希望能够使用从其他地方检索的项目预先填充资源缓存
(从2个以上的终端获得相同的项目是完全合理的。例如,您可以在/task/5
处获得任务,并作为{{1}的集合的一部分如果任务5是项目99)
我试过这个,但这很难看:
/projects/99/tasks
在控制器中:
// return the API in the project service
return {
project: null, // my own hand-rolled cache
get: function (id) {
// check cache
if (this.project != null && this.project.id == id) {
console.log("Returning CACHED project", this.project);
var future = $q.defer();
future.resolve(this.project);
// UGLY: for consistent access in the controller
future.$promise = future.promise;
return future;
} else {
return Projects.get({
id: id
});
}
}, // etc
如何使用AngularJS习语预先填充缓存?
答案 0 :(得分:0)
您可以手动将缓存值放入缓存工厂。注入$ cacheFactory,获取http缓存,并将对象放入缓存中,密钥是资源的路径。
例如:
var task = {
// ... task object here ...
};
var httpCache = $cacheFactory.get('$http');
httpCache.put('/projects/99/tasks/5', task);
httpCache.put('/task/5', task);
需要注意的一点是,如果将资源中的缓存标志设置为true,则默认使用$ http缓存。您还可以将其设置为自定义cacheFactory实例。在这种情况下,您只需将值放入自定义缓存中。