角度模板的通用缓存断路器?

时间:2014-04-11 09:08:07

标签: javascript angularjs

我有一堆带有外部模板的角度指令以及一些直接加载其他模板的代码。是否有一种简单的方法可以将缓存断路器添加为所有此类模板的查询参数?当然,我可以手动扩展所有模板URL,例如'?' + date,但我必须记住每次都这样做。这就是我寻找通用解决方案的原因。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

首先,您可以将模板uri的创建包装到角度服务中,这样您只能在一个地方生成uris。然后,当您需要为模板生成uri时,可以将该服务注入其中。

接下来,在该服务中,您可以拥有一个版本号的私有变量,您可以在每次发布时递增。然后,构建uri的服务只需在查询字符串中附加版本号,只有在更改版本号时才会破坏缓存。

根据您使用的平台,您可以使用构建服务器自动执行此操作。例如,如果您使用的是.net后端,则可以使用Web服务器上的dll版本号作为版本号。构建服务器(例如Team City)可以在部署到测试环境时更新它。

答案 1 :(得分:1)

我们所做的就是使用base中的index.html标记。

<head>
    <script type="text/javascript">
        document.write("<base href='http://" + document.location.host + "/" + buildNb + "' />");
    </script>
    ...
</head>

这会将相对路径解析为绝对路径时使用的基数更改,因此当AngularJS获取其模板时也是如此。请注意,这也解决了其他静态资产的问题,例如JS,CSS,图像。

index.html未缓存。每个其他文件都放在每个构建的新子目录中。这些文件无限期缓存。

答案 2 :(得分:0)

另一种解决方案是将所有模板放在$templateCache中。对此有一项艰巨的任务:https://www.npmjs.org/package/grunt-angular-templates。这会将所有模板放在一个JavaScript文件中。然后,您只需确保该文件未缓存。