更改$ includeContentRequested上的源URL

时间:2014-10-27 11:01:18

标签: angularjs caching angularjs-ng-include

我希望每次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',然后将部分包含在新链接中。

显然,我这样做是为了防止版本更改时出现缓存问题。这是一个好策略还是有更好的解决方案?提前感谢您的帮助......

2 个答案:

答案 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