如何检测角度转换文件是否已加载

时间:2016-02-03 16:20:02

标签: javascript angularjs angular-translate

我正在尝试在我的角度应用程序中使用一次性绑定来提高性能。所以我想使用下一个方式的angular-translate:



//This code does not work.
function myCtrl($translate){
    $scope.DESCRIPTION = $translate.instant('DESCRIPTION');
}


//I should use a timeout of next way:
//This code does work.
function myCtrl($translate){

   setTimeout(function(){
     $scope.DESCRIPTION = $translate.instant('DESCRIPTION');
   }, 1000);
}

<p> {{::DESCRIPTION}} </p>
&#13;
&#13;
&#13;

如何检测语言json文件的加载时间? 我不想使用setTimeouts。

我希望你理解我

谢谢!

3 个答案:

答案 0 :(得分:4)

检查此解决方案:

&#13;
&#13;
function loadTexts(scope, ids) {

  $translate.onReady(function() {

    var size = ids.length;

    for (var i = 0; i < size; i++) {
      var id = ids[i];
      scope[id] = $translate.instant(id);
    }

  });
};


function myCtrl($scope){
  loadTexts($scope, ['DESCRIPTION', 'HEADER_TEXT']);
}
&#13;
<p> {{::HEADER_TEXT}} </p>
<p> {{::DESCRIPTION}} </p>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

以下代码段来自docs

app.controller('Ctrl', ['$scope', '$translate', function ($scope, $translate) {
  $translate('HEADLINE').then(function (headline) {
    $scope.headline = headline;
  });
  $translate('PARAGRAPH').then(function (paragraph) {
    $scope.paragraph = paragraph;
  });
  $translate('NAMESPACE.PARAGRAPH').then(function (anotherOne) {
    $scope.namespaced_paragraph = anotherOne;
  });
}]);

在你的情况下,这应该这样做。

function myCtrl($scope, $translate){
    $translate('DESCRIPTION').then(function (description) {
         $scope.DESCRIPTION = description;
    });
}

尽管使用Angular-Translate是最简单的方法,但是使用像这样的过滤器。 (docs

<p>{{'DESCRIPTION' | translate}}</p>

答案 2 :(得分:0)

如果您需要在控制器中翻译字符串,而不是注入服务,则应直接注入过滤器...

在角度1. +中,您可以使用Filter suffix注入过滤器。

function MyCtrl(translateFilter) { console.log(translateFilter('mystring')); }

这应该为您提供加载所有过滤依赖项的安全性。