我希望每次ng-include
指令请求部分时更改URL。到目前为止,我能够看到这样的网址和事件:
app.run(function ($rootScope) {
$rootScope.$on('$includeContentRequested', function (event, url) {
console.log(event);
console.log(url);
});
});
现在我需要能够将网址从'templates/incs/includedPartial.html'
更改为'templates/incs/includedPartial.html?cache_version=1_1'
,然后将部分包含在新链接中。
显然,我这样做是为了防止版本更改时出现缓存问题。这是一个好策略还是有更好的解决方案?提前感谢您的帮助......
答案 0 :(得分:6)
我想我实际上找到了答案。你可以做的是创建一个拦截器。由于所有使用ng-include的请求实际上都是通过通用的$ httpProvider,您可以拦截请求并添加缓存破坏程序。
app.factory( "cacheBusterFactory", [ "VERSION", function( VERSION ) {
return {
request: function( config ) {
if( config.url.indexOf( ".html", config.url.length - ".html".length ) !== -1 ) {
config.url += "?v=" + VERSION.toString();
}
return config;
}
};
} ] );
“VERSION”在这种情况下是我在每次部署时更改的角度常量:
app.constant( "VERSION", 0.1 );
添加缓存破坏程序非常简单:
.config( [ "$httpProvider", function( $httpProvider ) {
$httpProvider.interceptors.push( "cacheBusterFactory" );
} ] )
正如您所看到的,我只拦截.html文件,因为这些是我需要添加缓存清除的唯一文件。您当然可以扩展或重建“cacheBusterFactory”以满足您的需求。
答案 1 :(得分:0)
我遇到了restTemplate
和预定义模板(例如UI Bootstrap)的问题。我通过测试缓存来解决它。
$templateCache