首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缓存的备用选项:状态提供程序中的false

缓存的备用选项:状态提供程序中的false
EN

Stack Overflow用户
提问于 2017-01-30 12:30:45
回答 1查看 401关注 0票数 0

我在我的状态中使用cache:false来避免模板(html视图)缓存,如下所示。

代码语言:javascript
复制
.state('index.project_setup', {
        url: '/:customerTag/project-setup',
        templateUrl: 'app/views/common/customer/projects/setup_projects_wizard.html',
        data: { pageTitle: 'Project Setup' },
        cache: false
    })

在将更改应用到html文件后,有时我需要硬刷新页面,而不只是重新加载。那么是我遗漏了什么呢,还是有什么方法可以完成这件事呢?

EN

回答 1

Stack Overflow用户

发布于 2017-01-30 16:23:00

Angular模板缓存和你的浏览器缓存是有区别的。当Angular第一次加载模板时,它将触发对该模板的AJAX请求,然后将HTMLin存储为名为$templateCache的服务,因此如果再次需要完全相同的模板,它将跳过AJAX调用,并使用存储在$templateCache中的HTML。

一旦刷新了页面,$templateCache服务就被初始化了(因为所有的JS都被初始化了),所有缓存的HTML都消失了,所以当Angular需要一个HTML文件作为模板时,它将首先触发AJAX调用,将其存储在$templateCache中,然后从现在开始使用缓存的HTML。

另一方面,您的浏览器不会在每次刷新时“初始化”他的缓存,所以如果您要请求以前缓存的文件,浏览器将跳过HTTP调用,并将使用他的缓存版本(如果可用)。

因此,假设我们需要名为x.html的模板,将会出现以下伪代码:

代码语言:javascript
复制
if (x.html exists in $templateCache)
    return x.html from $templateCache
else
    AngularJS perform HTTP GET for x.html
    if (browser has x.html cached version)
        return x.html from browser cache and don't fire HTTP request
    else
        fire HTTP request for x.html and return the result

这就是你必须每隔一段时间“硬重新加载”模板的方式。

我的开发解决方案是将一个不断变化的查询字符串附加到模板URL,例如:

代码语言:javascript
复制
.state('index.project_setup', {
        url: '/:customerTag/project-setup',
        templateUrl: 'app/views/common/customer/projects/setup_projects_wizard.html?v=' + Date.now(),
        data: { pageTitle: 'Project Setup' },
        cache: false
    })

这是一个简单的技巧,它导致浏览器总是获取HTML文件,因为查询字符串永远不会相同(好吧,它将在1毫秒内保持相同:),所以每次浏览器将获得对该HTML的HTTP请求时,它将不会与先前的请求匹配,也不会使用缓存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41929045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档