Невозможно использовать $translate.use в app.run: undefined

так как я обновил angular-translate с 2.9.0 до 2.15.2, я больше не могу использовать функцию $translate.use() в своем rootScope (app.run)

Значение $translate.use() не определено при загрузке страницы. Это код, который я использую для загрузки языка и смены языка.

$rootScope.changeLanguage = function (langKey) {
    if(langKey.length == 2) {
        $translate.use(langKey.toLowerCase()+"_"+langKey.toUpperCase());
        $rootScope.language = langKey;
    } else if(langKey.length == 5) {
        $translate.use(langKey);
        $rootScope.language = langKey.substring(0,2);
    }
};

$rootScope.changeLanguage($translate.use());

Этот код дает мне эту ошибку:

Uncaught TypeError: не удается прочитать свойство «длина» неопределенного в m.e.changeLanguage (app.js: 184)

(уменьшенный код, поэтому $rootScope переименовывается в m.e.)

Эта строка журнала дает мне следующее:

console.log("trans", $translate.versionInfo(), $translate.use());

транс 2.15.2 не определено

Как я могу заставить это работать снова?


person NVO    schedule 18.10.2017    source источник
comment
Поделитесь полной ошибкой консоли   -  person Vikasdeep Singh    schedule 18.10.2017
comment
@VicJordan добавил дополнительный код   -  person NVO    schedule 18.10.2017
comment
В документации указано: Если ключ не указан или указан ложный, он возвращает текущий используемый языковой ключ. Возвращаемая строка будет неопределенной, если настройка $translate не завершена. Вероятно, вам нужно использовать onReady().   -  person JB Nizet    schedule 18.10.2017
comment
@JBNizet да, я читал это, но в предыдущей версии это работало нормально в этом конкретном месте.   -  person NVO    schedule 18.10.2017
comment
@NVO, на всякий случай, правильно ли вы вводите $translate в требуемый контроллер?   -  person Vikasdeep Singh    schedule 18.10.2017
comment
Ага, myApp.run(['$rootScope', '$window', '$location', '$stateParams', '$api', '$translate', '$transitions', '$state', function($rootScope, $window, $location, $stateParams, $api, $translate, $transitions, $state) {   -  person NVO    schedule 18.10.2017


Ответы (1)


Вы получали эту ошибку, потому что при первом запуске скрипта в это время langKey не определен, поэтому добавьте проверку внутри функции changeLanguage перед использованием langKey, как показано ниже. Это будет работать:

    $rootScope.changeLanguage = function(langKey) {
      if (langKey) {
        if (langKey.length == 2) {
          $translate.use(langKey.toLowerCase() + "_" + langKey.toUpperCase());
          $rootScope.language = langKey;
        } else if (langKey.length == 5) {
          $translate.use(langKey);
          $rootScope.language = langKey.substring(0, 2);
        }
      }
    };

    $rootScope.changeLanguage($translate.use());
person Vikasdeep Singh    schedule 18.10.2017
comment
Ах, очень просто, я должен был бы и сам, но это сработало! - person NVO; 18.10.2017