$ modal.open缓存UI的OLD副本

时间:2015-12-31 18:24:57

标签: angularjs modal-dialog angular-ui-bootstrap

我正在打开一个模式对话框,其中包含以下内容:

    var modalInstance = $modal.open({
        animation: false,
        templateUrl: '../templates/ResponseModal.html',
        controller: 'ModalResponseCtrl',
        size: 'lg',
        resolve: {
            response: function () {
                return selResponse;
            },
            cmt: function () {
                return cmt;
            }
        }
    });

一切都正常运作。但是,如果我更改服务器上的ResponseModal.html,浏览器永远不会重新读取该文件。浏览器控制台不显示尝试读取它,甚至检查它是否已更改。不知何故,ResponseModal.html文件的旧副本正在缓存在内存中,我无法弄清楚如何清除它并强制它再次读取。我通常使用“shift-refresh”强制浏览器重新获取所有部分 - 但这不适用于此。完全关闭浏览器并重新启动它不会清除缓存。删除所有历史作品,但这是极其重要的。

是否有更简单的方法来说服$ modal机制忘记旧的缓存副本,并从服务器重新读取新的?

2 个答案:

答案 0 :(得分:0)

jbrown的评论是绝对正确的(在Chrome中它更容易,只需打开检查器并在打开时自动禁用缓存),但有时您不希望这些.html文件缓存在ALL,因为它们可以可能会在生产环境中改变(或生成)。

假设你正在使用Apache,我在这个用例中发现使用.htaccess可以很好地禁用某些视图文件的缓存。说实话,在今天它没有提供导致服务器负载的.html文件,它是动态数据驱动的东西。这是使用.htaccess

在简单的.html部分上禁用(几乎全部)缓存的简单方法
ExpiresActive On
ExpiresByType text/html "access plus 1 minute"

这可以阻止洪水,但也确保它会在合理的时间内要求提供新版本的页面。它本质上是有缺陷的,因为它涉及时间因素,但这在我使用类似用例的经验中运作良好。

答案 1 :(得分:0)

只要您在Angular中看到/使用templateUrl,请考虑$templateCache。第一次下载HTML模板后,它将存储在$templateCache服务中,并且不会通过正常的应用程序交互再次更新。

根据您的ExpiresCache-Control标头,强制重新加载可能无效。最好的办法是在浏览器的调试窗口打开时禁用浏览器的缓存,如上所示。

了解尽管您仍然应该开发测试您的应用程序,因为普通用户会使用您的应用程序,而不是依赖刷新的缓存。