一尘不染

如何在angularjs中的选择框选项内进行ng翻译

angularjs

如何应用ng-translate来翻译选择框内的选项。
例如:

模板:

<select class="form-control" ng-model="me.gender" ng-options="gender.name for gender in genders">
</select>

控制器:

$scope.genders = [{code: "M", name:"TXT_MALE"}, {code: "F", name:"TXT_FEMALE"}]

enUS.json:

{
    "TXT_MALE": "Male",
    "TXT_FEMALE": "Female",
}

我试过像这样添加过滤器,ng-options="gender.name for gender in genders | translate"
但很显然它是在向$scope.genders数组而不是单个元素添加过滤器

我尝试编写自己的过滤器(对此我是陌生的)

filter('translateArrayObj', ['$translate', '_', function($translate, _) {
  return function(arr) {
    var arr2 = [];
    angular.forEach(arr, function (value, key) {
      $translate(value.name).then(function(translation) {
        var obj2 = angular.copy(value);
        obj2.name = translation;
        obj2.code = value.code;
        arr2.push(obj2);
      });
    });
    return arr2;
  }
}])

但我得到以下错误

Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!

这似乎是一个简单的任务,但已经用了我一半的时间,我在做什么错了:(


阅读 209

收藏
2020-07-04

共1个答案

一尘不染

您需要将过滤器应用于gender.name而不是应用于genders数组:

<select ng-model="me.gender" ng-options="gender.name | translate for gender in genders"></select>

这是一个演示

2020-07-04