当前位置: 首页 > 知识库问答 >
问题:

Angular2缓存HTTP响应的最简单方法[重复]

万开畅
2023-03-14

我有一个页面,它向同一个位置发出超文本传输协议请求,只是根据用户的需求使用不同的参数。所以我的代码看起来像这样:

this.http.post( //I am open to POST methods or GET methods as I have security in the back to prevent malicious writes.
   'http://192.168.1.45:3000/mylocation',
   'p1=' + param1 + '&p2=' + param2, 
   {headers: headers}
)

例如,在 JQuery 中,您在框架中构建了一个缓存属性,该属性会自动缓存并且非常容易实现:

$.ajax({
  cache: true,
  //other options...
});

Angular2有类似的东西吗?只要用户在应用程序中,我就希望缓存这些动态响应。因此,如果用户使用相同的参数请求相同的url,那么它只会从缓存中获取它,如果参数从未被使用,那么它会进行网络调用。

我在请求选项的Angular2文档中找不到任何内容:

https://angular . io/docs/js/latest/API/http/request options-class . html

共有1个答案

米树
2023-03-14

缓存数据,如果缓存数据可用,则返回此值,否则发出HTTP请求。如果您想为不同的请求(参数)重用,您可以调整为将引用存储在数组中。

getData() {
    if(this.data) {
      // if `data` is available just return it as `Observable`
      return Observable.of(this.data); 
    else if(this.observable) {
      // if `this.observable` is set then the request is in progress
      // return the `Observable` for the ongoing request
      return this.observable;
    } else {
      // create the request, store the `Observable` for subsequent subscribers
      this.observable = this.http.get('/someUrl')
          .map(res => res.json())
          .do(val => {
            this.data = val;
            // when the cached data is available we don't need the `Observable` reference anymore
            this.observable = null;
          })
          // make it shared so more than one subscriber can get the result
          .share();
      return this.observable;
    }
}
 类似资料:
  • 问题内容: 我想确保浏览器永远不会缓存服务器的响应,这样即使发出两个相同的请求(相隔一纳秒),也始终会与服务器联系。这是实现此目标的正确方法: 谢谢唐 问题答案: 不,那不是正确的方法。这是正确的方法: 您可能会看到其他人在建议其他条目/属性,但是当至少提及上述内容时,它们是完全不相关的。 更改后,请不要忘记在测试之前清除浏览器缓存。 也可以看看: 网站站长缓存教程

  • 我通过一个服务公开了一个HTTP GET请求,几个组件正在使用这个数据(一个用户的配置文件细节)。我希望第一个组件请求实际执行对服务器的HTTP GET请求并缓存结果,这样后续的请求将使用缓存的数据,而不是再次调用服务器。 这里有一个服务的例子,你会建议如何用Angular2和typescript实现这个缓存层。

  • 遵循本课程https://www.pluralsight.com/courses/angular-2-getting-started和github材料产品。服务试图避免调用http。每次单击链接时都会请求get()。我认为每次加载文件而不是将其保存为内存中的对象是一种很大的浪费。 正在尝试替换此代码: 用这个: 如果被低估,则永远不应调用此行 但它被称为!!!! 在镀铬控制台中: 最后一行不应该出

  • 问题内容: 我注意到我的代码具有响应性,事实上,如果我将其缩放到手机或平板电脑的大小,则所有文本,链接和社交图标都会相应缩放。 但是,唯一没有的是我在体内的形象。包裹在段落标签中…话虽如此,是否有一种简单的方法也可以使图像具有响应性? 这是我以前在体内显示图像的代码: 问题答案: 你可以尝试做 如果采用流畅的布局,则可以缩放图像。 为了响应(意味着布局对窗口的大小做出反应),您可以向图像添加一个类

  • 本文向大家介绍ThinkPHP简单使用memcache缓存的方法,包括了ThinkPHP简单使用memcache缓存的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ThinkPHP简单使用memcache缓存的方法。分享给大家供大家参考,具体如下: Thinkphp的默认缓存方式是以File方式,在/Runtime/Temp 下生成了好多缓存文件。 服务器装了memcached后想给

  • 在我的服务中,我执行了一个超文本传输协议调用,并将响应返回为可观察的 我订阅了一个组件 这样做实际上是有效的;我可以在控制台中看到对象的转储 当我想从服务返回映射为json的响应时,出现了问题。 我想做他的 但在运行时,我得到了一个模糊的javascript错误(准确地说,这是来自Zone.js) 我已经尝试将返回类型从