4

ここでの中心的な問題は、$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 docs から直感的に理解することはできません (このアプローチよりもはるかに優れているとは言えません)。また、構成内の Cookie を取得する方法もないようです。 $cookiesProvider を介してブロックします。

おそらく、このアプローチはまったく悪い考えであり、問​​題を解決するためのより良い方法がありますか?

4

1 に答える 1

2

ページが動的に生成される場合、Cookie の代わりに HTML にバージョン番号を入れることができます。たとえばindex.html、1 ページのアプリでは次のようになります。

<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 ) {
    ...
于 2016-05-02T14:41:35.220 に答える