我已经创建了一个通过$ http.get()获取的服务。
我的服务用于呈现几个ui元素的指令。该服务是异步的。它在指令代码中使用,如:myService.getStuff(),它返回一个自定义的promise(来自$ http.get promise的回调中)。
但我希望我的服务只在应用程序的生命周期内对$ http.get执行一次调用。并缓存http.get响应。
所以说我在我的html中使用指令2次。这就是我想要的:第一次调用它(立即返回并通过$ http.get获取内容)。它第二次调用时会检测到对$ http.get的未完成调用。因此不会再对$ http.get进行调用,但不知何故等待第一次调用的返回。
答案 0 :(得分:2)
您可能希望使用$http
return $http.get(/*...*/, { cache: true }).then(/*...*/);
或者只是在您的服务中缓存承诺。
function MyService($http) {
var promise;
this.get = function() {
promise = promise || $http.get(/*...*/).then(/*...*/);
return promise;
}
}
如果您正在使用uirouter,另一种方法是resolve
处于父状态的数据,并将已解析的数据注入所有组件。
答案 1 :(得分:0)
将cache
设置为true
,如下所示:
$http.get(yourUrl, {cache: true})
.then(...)
对此的任何后续调用都将使用缓存值。