2017-10-18 24 views
1

因爲我已將角度翻譯從2.9.0升級到2.15.2我無法在rootScope中使用$ 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)說:*如果沒有或者給出了一個虛假的鍵,它返回當前使用的語言鍵。如果設置$ 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

相關問題