Angularjs переводит код программной части

Я борюсь с привязкой класса enum к оператору SELECT.

Данное определение TypeScript:

enum SearchCriteria {
  expensive = 0,
  cheap = 1,
  interesting = 2,
  newest = 3
}

и использование:

<div id="searchResultSort">
            {{'sort' | translate}}:
            <select 
                    ng-model=" options.selectedCriteria">
                <option value="0"> {{'sortByExpensive' | translate}}</option>
                <option value="1"> {{'sortByCheap' | translate}}</option>
                <option value="2"> {{'sortByInteresting' | translate}}</option>
                <option value="3"> {{'sortByNewest' | translate}}</option>
            </select>
        </div>

Теперь есть несколько проблем с этим кодом:

1) Значения Enum жестко закодированы

2) Функциональность значения по умолчанию не работает - я отследил эту ошибку до того, как angularjs обрабатывает этот сценарий. Он использует сравнение ===, таким образом, "0"!== 0. Исходное значение ng-модели не задано при выборе

Я бы не отказался решить эту проблему, создав в контроллере новый массив с двумя свойствами: {translatedVal, enumId}.

Проблема в том, как мне сохранить синхронизацию этого «translatedVal» с реальным переводом?

sortingOptions: [
    {
        val: SuperSearch.Repository.Model.SearchCriteria.cheap,
        translation: bindAndInterpolateLanguage('languageKey')
    },

Использование углового перевода.


person Erti-Chris Eelmaa    schedule 17.02.2014    source источник
comment
Рассматривали ли вы возможность использования ng-options (docs.angularjs.org/api/ng/directive/select) вместо этого? Это даст вам возможность напрямую привязывать значения к числам (1 против 1)   -  person jlb    schedule 20.02.2014


Ответы (2)


Это лучшее, что я нашел и до сих пор использую в своих проектах для привязки значений к выбранному компоненту. Вот у меня есть список отделов.

<select data-ng-model="selectedDepartment"   
data-ng-options="dept.DepartmentId as dept.Title for dept in departments"   
data-ng-change="onDepartmentChange()" />  

Вы можете получить доступ, а также управлять значением "selectedDepartment" в любое время.

Надеюсь, это даст некоторое представление о решении проблемы, с которой вы столкнулись.

person Manish Gupta    schedule 25.02.2014
comment
Мне нужно как-то включить перевод с этим - person Erti-Chris Eelmaa; 25.02.2014
comment
@ Erti-ChrisEelmaa, вы можете использовать фильтр translate в ng-options, чтобы изменить то, что отображается в качестве метки параметра. Я отредактировал ответ Маниша, чтобы продемонстрировать. - person r3m0t; 26.02.2014

если вы объявляете значения вручную, то попробуйте так

  <select class="form-control input-lg" ng-model="selectedSearchCriteria" ng-change="changeTenant(this.selectedSearchCriteria)" required ng-options="i.ToString() for i in SearchCriteria"></select> 

var SearchCriteria=[{
          "expensive":0},
          {"cheap" : 1},
          {"interesting" : 2},
          {"newest" : 3}]        
         $scope.selectedSearchCriteria = SearchCriteria[0];

Если вы получаете значения со стороны сервера, используя вызов ajax, попробуйте сделать это ниже.

 <select class="form-control input-lg" ng-model="selectedSearchCriteria" ng-change="changeTenant(this.selectedSearchCriteria)" required ng-options="i.ToString() for i in SearchCriteria"></select> 

             $http.get(URL)
               .success(function (response) {
                   $scope.SearchCriteria= response;
                   $scope.selectedSearchCriteria = response[0];
                   $scope.$apply();
               });
person Ramesh Rajendran    schedule 26.02.2014