【问题标题】:AngularJS - iterate all cached partialsAngularJS - 迭代所有缓存的部分
【发布时间】:2014-02-19 22:08:58
【问题描述】:

我通过 $routeProvider 设置了路由,类似于

$routeProvider.when('/page/:id', 
{templateUrl: 'partials/public/view/page.html', controller: XYZ});

在第一页加载时,我想遍历缓存的部分并删除它们。最初我尝试过:

$templateCache.removeAll()

在首次创建父控制器(在整个 body 元素上声明)时调用 - 也就是页面加载。这似乎可行,但一些 3rd 方插件(指令)然后抛出错误

Error: Failed to load template: template/tabs/tab.html

我知道我可以使用 $templateCache.remove(key) 一次删除一个部分缓存,但我不喜欢在某些自定义清除函数中硬编码所有部分键的想法。相反,我想获取所有缓存的部分,如果键以某个字符串开头,则将其删除。我的问题是,有没有办法迭代所有缓存的部分?

【问题讨论】:

  • 为什么要从模板缓存中删除任何内容?我不明白用例。
  • 因为应用程序已经以某种测试模式部署到服务器并且我仍在推动更改,所以我想确保一旦页面加载,用户将获得最新信息。当它稳定下来我不会太在意它,但现在我确实需要确保避免错误的错误。
  • 所以...请求不同的文件?像这样从缓存中删除东西是有问题的。
  • 通过请求不同的文件,您的意思是添加例如$routeProvider 的 when() 的 URL 参数?我不喜欢它是存储库中无用的更改,我需要一些工具在推送之前自动执行此操作(好吧,一些 ant 任务可以解决问题)。但它可以工作。
  • 你应该有办法对你的 javascript 文件进行版本控制,以处理缓存破坏,它应该是你构建过程的一部分(如果你不这样做,你应该马上做——尤其是在你正式上线之前)。我的意思是更改模板网址本身。

标签: javascript angularjs caching partials


【解决方案1】:

我认为没有一种简单的方法可以迭代 $templateCache。仅供参考,我在使用 Angular 的 UI Bootstrap 时遇到了错误。解决此错误的一种简单方法是在更改路由时删除新的缓存条目,而不是删除所有条目:

...

app.run(function($rootScope, $templateCache) {
    $rootScope.$on('$routeChangeStart', function(event, next, current) {
        if (typeof(current) !== 'undefined'){
            $templateCache.remove(current.templateUrl);
        }
    });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 2014-09-06
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    相关资源
    最近更新 更多