当前位置: 首页 > 面试题库 >

使Angular中的所有$ http缓存无效

邹禄
2023-03-14
问题内容

我有一个Angular应用程序,其中包含基于Angular的内置$resource服务的许多服务。其中许多使用cacheFactory来创建自己的独立缓存。但是,我想$http在有人注销时将所有这些(命名的高速缓存和“默认”
高速缓存)销毁。现在,我可以使用来完成此操作location.reload(true),该功能当然可以工作,但是如果有可能在不完全更改应用程序结构的情况下不重装就可以实现。

需要澄清的是,我知道如果引用范围内的单个缓存,则可以删除缓存的值,但是我想做的是全面删除所有缓存,而不必知道它们的含义。都叫。


问题答案:

您可以$cacheFactory从工厂构造函数中注入并获取缓存对象(例如:),$cacheFactory.get('$http')并用于removeAll()清理所有缓存。destroy()如果要完全删除高速缓存对象,请使用。

为了获得所有cacheObject
id,可以使用$cacheFactory.info()它将返回每个缓存对象的摘要信息的对象{id:'cacheObjId', size:'cacheSize'}

例:-

angular.forEach($cacheFactory.info(), function(ob, key) {
   $cacheFactory.get(key).removeAll();
});

您可以将removeAll/
destroyAll函数添加到cacheFactory,以便通过装饰$cacheFactory,可以在其他任何地方使用它,类似这样。

.config(['$provide',
    function($provide) {
      $provide.decorator('$cacheFactory', function($delegate) {
        $delegate.removeAll = function() {
          angular.forEach($delegate.info(), function(ob, key) {
            $delegate.get(key).removeAll();
          });
        }

        $delegate.destroyAll = function() {
          angular.forEach($delegate.info(), function(ob, key) {
            $delegate.get(key).destroy();
          });
        }
        return $delegate;
      });
    }
  ])



angular.module('App', [])

  .config(['$provide',

    function($provide) {

      $provide.decorator('$cacheFactory', function($delegate) {

        $delegate.removeAll = function() {

          angular.forEach($delegate.info(), function(ob, key) {

            $delegate.get(key).removeAll();

          });

        }



        $delegate.destroyAll = function() {

          angular.forEach($delegate.info(), function(ob, key) {

            $delegate.get(key).destroy();

          });

        }

        return $delegate;

      });

    }

  ])

  .run(function($cacheFactory) {

    var value = 123;

    $cacheFactory('cache1').put('test', value);

    $cacheFactory('cache2').put('test', value);

    console.log($cacheFactory.info());

    $cacheFactory.removeAll();

    console.log($cacheFactory.info());

  });


<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="App">



</div>


 类似资料:
  • 问题内容: 从IE发送的所有ajax调用都被Angular缓存,我为随后的所有调用获取a 。尽管请求是相同的,但在我的情况下响应将是不同的。我想禁用此缓存。我尝试将$ http.get 添加到它,但仍然没有帮助。如何解决此问题? 问题答案: 我没有为每个GET请求禁用缓存,而是在$ httpProvider中全局禁用了它:

  • 除了前面章节讲到的服务器端缓存外, Web 应用还可以利用客户端缓存 去节省相同页面内容的生成和传输时间。 通过配置 yii\filters\HttpCache 过滤器,控制器操作渲染的内容就能缓存在客户端。 HttpCache 过滤器仅对 GET 和 HEAD 请求生效, 它能为这些请求设置三种与缓存有关的 HTTP 头。 Last-Modified Etag Cache-Control Las

  • 有没有办法刷新Laravel 4中的所有缓存?我正在使用文件进行缓存。我在文档上读到了可以使用的,但是如果我需要删除所有缓存怎么办? artisan命令也很有用,我认为回购协议存在问题,但不确定它是否已经实现。 谢谢!

  • void clear_all_cache(int expire time) This clears the entire template cache. As an optional parameter, you can supply a minimum age in seconds the cache files must be before they will get cleared. 清除所

  • 问题内容: 我想确保浏览器永远不会缓存服务器的响应,这样即使发出两个相同的请求(相隔一纳秒),也始终会与服务器联系。这是实现此目标的正确方法: 谢谢唐 问题答案: 不,那不是正确的方法。这是正确的方法: 您可能会看到其他人在建议其他条目/属性,但是当至少提及上述内容时,它们是完全不相关的。 更改后,请不要忘记在测试之前清除浏览器缓存。 也可以看看: 网站站长缓存教程

  • 一个好的HTTP缓存策略可以极大地提高一个web应用的性能及客户端的体验。谈到HTTP缓存,它主要是与HTTP的响应头'Cache-Control'相关,其次另外的一些响应头比如'Last-Modified'和'ETag'等也会起一定的作用。 HTTP的响应头'Cache-Control'主要帮助私有缓存(比如浏览器端缓存)和公共缓存(比如代理端缓存)了解它们应该如果缓存HTTP响应,以便后用。