Javascript AngularJS-迭代所有缓存的部分
我已经通过$routeProvider设置了路由,类似于Javascript AngularJS-迭代所有缓存的部分,javascript,angularjs,caching,partials,Javascript,Angularjs,Caching,Partials,我已经通过$routeProvider设置了路由,类似于 $routeProvider.when('/page/:id', {templateUrl: 'partials/public/view/page.html', controller: XYZ}); 在第一个页面加载时,我希望遍历缓存的部分并删除它们。最初我尝试过: $templateCache.removeAll() 首次创建父控制器(在整个主体元素上声明)时调用-也称为页面加载。这似乎是可行的,但一些第三方插件(指令)会抛出错误
$routeProvider.when('/page/:id',
{templateUrl: 'partials/public/view/page.html', controller: XYZ});
在第一个页面加载时,我希望遍历缓存的部分并删除它们。最初我尝试过:
$templateCache.removeAll()
首次创建父控制器(在整个主体元素上声明)时调用-也称为页面加载。这似乎是可行的,但一些第三方插件(指令)会抛出错误
Error: Failed to load template: template/tabs/tab.html
我知道我可以使用$templateCache.remove(key)一次删除一个部分缓存,但我不喜欢在一些自定义清除函数中硬编码所有部分键的想法。相反,我希望获取所有缓存的部分,如果key以某个字符串开头,则将其删除。我的问题是,有没有一种方法可以迭代所有缓存的部分?我认为没有一种简单的方法可以迭代$templateCache。仅供参考,我在使用Angular的UI引导时发现了您的错误。解决此错误的一个简单方法是在更改路由时删除新缓存项,而不是删除所有项:
...
app.run(function($rootScope, $templateCache) {
$rootScope.$on('$routeChangeStart', function(event, next, current) {
if (typeof(current) !== 'undefined'){
$templateCache.remove(current.templateUrl);
}
});
});
为什么要从模板缓存中删除任何内容?我不理解这个用例。因为应用程序已经以某种测试模式部署到服务器上,我仍在推动更改,所以我想确保一旦加载页面,用户将拥有最新信息。当它稳定下来时,我不会太在意它,但现在我确实需要确保避免错误。所以。。。请求其他文件?从缓存中删除这样的内容是有问题的。通过请求不同的文件,您的意思是将URL参数添加到$routeProvider的when()?我不喜欢的一点是,它对存储库来说是一个无用的更改,我需要一些工具在推送之前自动完成它(好吧,一些ant任务可以做到这一点)。但这是可行的。你应该有一种方法来对你的javascript文件进行版本化,以处理缓存破坏,而且这应该是你构建过程的一部分(如果你不这样做,你应该马上做——特别是在你正式上线之前)。我的意思是更改模板url本身。