Подтвердить что ты не робот

Как выполнить ng-translate внутри опции select box в 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!

Кажется простой задачей, но уже занял половину моего дня, что я делаю неправильно: (

4b9b3361

Ответ 1

Вам нужно применить фильтр к gender.name, а не к массиву genders:

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

Вот демонстрация