如何使用$ cookies来缓存半身像Angular Translate静态文件

时间:2016-05-02 13:46:53

标签: angularjs angular-translate angular-cookies

这里的核心问题是我无法将$ cookie注入配置块,并且在Angular Translate中配置静态文件加载似乎只能在配置块中完成。我有一个包含我的应用版本的Cookie,我希望将其用作我的静态翻译文件的查询参数,以便在版本之间保留缓存形式。

以下是代码:

(function( ) {
    'use strict';

    angular.module( 'vcp.core' ).
        config( configureTranslationResources );

    function configureTranslationResources( $translateProvider ) {

        var $cookies;
        angular.injector(['ngCookies']).invoke(['$cookies', function(_$cookies_) {
            $cookies = _$cookies_;
        }]);

        var vcpVersion = $cookies ? $cookies.get('vcp-version') : '';

        $translateProvider.useStaticFilesLoader({
            prefix: '/v2/assets/i18n/',
            suffix: '.json?v=' + vcpVersion
        });

    }

})( );

这感觉很奇怪,应该有一个更好的方法。我不能直接从Angular Translate文档中了解如何在运行块中配置静态文件加载(不是比这种方法更好),并且它似乎不是一种方法来获取配置块中的cookie通过$ cookiesProvider。

也许这种做法完全是一个坏主意,并且有更好的方法来解决问题?

1 个答案:

答案 0 :(得分:2)

如果您的页面是动态生成的,您可以将版本号放在HTML而不是cookie中。例如,在单页应用中的index.html中:

<script>
'use strict';
angular.module('vcp.settings', [])
.constant('vcpVersion', '{{vcp_version}}');
</script>

服务器端注入vcp_version的位置。由于它在部署期间是静态的,因此您的服务器可以缓存生成的HTML。

在配置期间可以使用常量,因此您可以将版本号注入配置函数,如下所示:

angular.module( 'vcp.core', ['vcp.settings'] ).
    config( configureTranslationResources );

function configureTranslationResources( $translateProvider, vcpVersion ) {
    ...