Состояние гонки углового перевода

Я столкнулся с состоянием гонки, используя angular-translate-loader-partial.

Сначала я изменяю состояние загрузчика с помощью $translatePartialLoader.addPart(partname), что требует последующего обновления таблицы. Подробности см. в API

Затем я звоню $translate(translateKey). Это начинает гонку. Он может отображать или не отображать перевод, в зависимости от того, был ли уже загружен языковой файл.

Как я могу убедиться, что все мои частичные файлы загружены до того, как я использую $translate?


person Rhionin    schedule 03.07.2014    source источник


Ответы (1)


Один из вариантов — перехватить событие $translatePartialLoaderStructureChanged. Который будет запущен только после того, как часть будет доступна.

Чтобы убедиться, что деталь доступна:

        $rootScope.$on('$translatePartialLoaderStructureChanged', function (e, Part_Name) {
            if (Part_Name === 'PartThatYouNeed') {
                $translate.refresh().then(function () {
                    $translate(translateKey);
                });
            }
        });

Или, возможно, лучший вариант, если это будет использоваться во всем вашем приложении, вы можете перехватить это событие и вызвать функцию обновления в вашей команде запуска приложений, как это

app.run(function ($state, $rootScope, $translate) {
        $rootScope.$on('$translatePartialLoaderStructureChanged', function (e, Part_Name) {
            $translate.refresh();
        });
});

И если вам нужно запустить код установки после того, как языковая таблица станет доступной, я бы предложил запустить rootScope после завершения обновления:

app.run(function ($state, $rootScope, $translate) {
    $rootScope.$on('$translatePartialLoaderStructureChanged', function (e, Part_Name) {
        $translate.refresh().then(function () {
            $rootScope.$emit('ApplicationTranslationsRefreshed', Part_Name);
        });
    });
});

После этого в любом месте вашего приложения вы можете подключить событие ApplicationTranslationsRefreshed, чтобы узнать, когда можно использовать $translate('key_that_is_in_the_new_part'):

        $rootScope.$on('ApplicationTranslationsRefreshed', function (e, Part_Name) {
            console.debug(Part_Name + "is now avaialable")
        });
person davmelmeggeo    schedule 05.05.2015