不能在 app.run 中使用 $translate.use:未定义



因为我将角度翻译从 2.9.0 升级到 2.15.2,所以我不能再在我的 rootScope 中使用 $translate.use() 函数了 (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());

这段代码给了我这个错误:

捕获的类型错误:无法读取未定义的属性"长度" at m.e.changeLanguage (app.js:184)

(缩小代码,因此$rootScope重命名为 M.E.)

此日志行为我提供了以下内容:

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

反式 2.15.2 未定义

我怎样才能让它再次工作?

您收到此错误是因为当脚本第一次运行时,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());

最新更新