1

我的角度应用程序只需要在应用程序加载时从服务器获取一次数据,然后只与服务器通信以覆盖数据。有没有推荐的方法来实现这个?

到目前为止,我正在使用$resource.query获取初始数据集,将资源存储在服务中,并且正在考虑现在我需要覆盖 GET 操作,但不确定如何去抑制它与服务器的通信。

我还有另一个名为的 Web 服务getLatest,它执行大量服务器端工作以获取其他记录,然后我需要将这些记录附加到我的缓存资源中。我该怎么做呢?我考虑过以某种方式从检索到的数据中手动创建 Resource 实例,或者可能在 getLatest 调用返回后触发一个新的(未缓存的)资源查询(尽管这对我来说似乎效率低下)

4

2 回答 2

2

@tschiela 是对的,您可以使用cache资源上的属性来缓存资源。但是您应该了解缓存失效策略。

  • 什么时候应该引用缓存
  • 服务器数据更新时会发生什么。
  • 对于任何被缓存的东西,你能忍受数据的不一致吗?
  • 我不确定,但标准实现$http服务是否缓存荣誉HTTP expiration header(如果有的话)。

总体而言,基于服务器的 HTTP 过期标头是提供缓存的最佳方式,因为服务器上有更多控制权,并且大多数浏览器都支持 GET 请求。

于 2013-09-08T13:53:23.733 回答
1

您可以将缓存与cache:true

.factory('Data', function($resource){
      return $resource('http://some.url.of.api', {}, {
        'get' : { method:'GET', cache: true }
      });
    })

或者您可以实现自己的缓存工厂。在 AngularJS 文档中了解更多信息:$resource

于 2013-09-08T13:36:38.717 回答