【问题标题】:How to use $cookies to cache bust Angular Translate static files如何使用 $cookies 缓存 Angular Translate 静态文件
【发布时间】:2016-08-27 07:27:59
【问题描述】:

这里的核心问题是我无法将 $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 阻止。

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

【问题讨论】:

    标签: angularjs angular-translate angular-cookies


    【解决方案1】:

    如果您的页面是动态生成的,您可以将版本号放在 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 ) {
        ...
    

    【讨论】:

    • 好主意,谢谢。即使它不是动态生成的(在这种情况下不是动态生成的),我也可以使用构建工具将其放入 index.html 并仍然使用相同的想法将其设为常量,这似乎比设置它更干净在 cookie 中并以这种方式传递它。
    猜你喜欢
    • 1970-01-01
    • 2021-05-11
    • 2022-07-26
    • 2019-04-14
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 2015-07-04
    相关资源
    最近更新 更多