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

使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. 清除所

  • 问题内容: 我有一个页面,根据变量的长度,它可以发出不同数量的请求,然后我只想在所有请求完成后才将数据发送到范围。对于这个项目,我不想使用jQuery,因此请不要在答案中包含jQuery。目前,随着每个请求的完成,数据被发送到作用域,这不是我想要的。 这是我到目前为止的部分代码。 这是我对此表示怀疑的部分,因为某些东西需要作为的参数,但是在Angular的文档中并未提及,我不确定它的含义。 谢谢你

  • 我已经创建了AMP页面,它被谷歌成功缓存。 现在,我想使CDN缓存中所有Google AMP缓存的URL无效。 是否可能,如果可能,如何从AMP CDN获取所有缓存URL?