2017-10-18 5 views
1

私はangle-translateを2.9.0から2.15.2にアップグレードして以来、私はrootscope(app)で$ translate.use()関数を使用できません.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: Cannot read property 'length' of undefined at m.e.changeLanguage (app.js:184)

($ rootScopeは私に名前が変更されたので、コードを縮小さ)

このログ行は私に次のようになります:

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

trans 2.15.2 undefined

この作品を入手するにはもう一度?

+0

共有あなたの完全なコンソールエラー – VicJordan

+0

は@VicJordanは、いくつかの余分なコード – NVO

+0

[ドキュメント](https://angular-translate.github.io/docs/#/api/pascalprecht.translateを追加しました。 $ translate#methods_use)は次のように言います:* noまたは偽のキーが与えられている場合は、現在使用されている言語キーを返します。 $ translateの設定が完了していない場合、返される文字列は未定義です*おそらくonReady()を使う必要があります。 –

答えて

1

langKeyが定義されていないときに初めてスクリプトが実行されているので、langKeyを使用する前にchangeLanguage関数内で以下のようにチェックしてください。それは動作します:

$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()); 
+0

ああ、非常に簡単ですが、自分自身もtgatする必要があります。 – NVO

関連する問題