Как использовать $cookies для кэширования статических файлов Angular Translate

Основная проблема заключается в том, что я не могу вставить $ cookies в блок конфигурации, а настройка статической загрузки файлов в 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 ответ

Решение

Если ваша страница генерируется динамически, вы можете поместить номер версии в HTML вместо куки. Например, в 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 ) {
    ...
Другие вопросы по тегам