Angular ng-options с отслеживанием создает неизвестный элемент option

Моя цель здесь - создать список выбора, в котором значения параметров установлены для одного из свойств моих объектов. При добавлении параметра отслеживания путем привязки в директиву ng-options создается неизвестный элемент параметра, и это единственный параметр, который когда-либо отображался как выбранный. Это поведение находится в angular v1.3 (это версия, которую я использую). В версии 1.4 он по-прежнему создает неизвестный элемент, но меняет отображение, чтобы отображать другой выбранный элемент. Ни в том, ни в другом случае он не устанавливает начальное состояние раскрывающегося списка в соответствии со значением модели.

Отслеживание ng-options на примере v1.3

  <body>
    <script>
    angular.module('plunker', [])
    .controller("MyCntrl",   function($scope) {
        $scope.myColor = "rd"; // red
        $scope.colors = [
          {name:'black', code:'bk'},
          {name:'white',  code:'wh'},
          {name:'red', code:'rd'},
          {name:'blue', code:'bl'},
          {name:'yellow', code:'yl'}
        ];
    });
  </script>
    <div ng-controller="MyCntrl">
      <select ng-model="myColor" ng-options="color.code as color.name for     color in colors track by color.code"></select><br>
      <hr/>
      <span>Currently selected: {{myColor}}</span>
   </div>
</body>

В v1.4 он по-прежнему не устанавливает начальное состояние, но при выборе нового значения он изменит отображение. Я нахожу странным, что это не работает и что это не проблема.

Angular v1.4 Plnkr

Если вам интересно, мы хотим, чтобы значения параметров были известными кодами, которые наша автоматизация тестирования может использовать, и единственное, что мы хотим, чтобы значение модели было кодом. Кажется, что это довольно стандартная вещь.


person HisDivineShadow    schedule 06.11.2015    source источник


Ответы (1)


Вам нужно установить значение для всего объекта в вашем контроллере.

   $scope.myColor ={name:'red', code:'rd'};

Тогда он будет правильно выбран.

person Scott    schedule 06.11.2015
comment
Проблема в том, что моя модель (которая исходит из БД) имеет только код. Метка поступает из локализованной системы управления контентом. Итак, все, что мне нужно в модели для установки и извлечения выбранного значения, — это код. - person HisDivineShadow; 07.11.2015
comment
Я не уверен, почему это проблема. Если ваш код выглядит как пример, который вы привели выше, то это решение, независимо от того, есть ли у вас только код или вам нужен код. Если ваша модель содержит объекты, у которых есть и имя, и код, и изначально у всех есть код, просто найдите в своем списке объект с этим кодом и установите для него текущее значение. Когда вы отправляете данные обратно в свое приложение, просто извлеките код выбранного элемента и отправьте его. - person Scott; 07.11.2015
comment
Да, это выполнимо, но требует дополнительного кода, который не нужен. Нет причин, по которым список нельзя привязывать только к коду, когда вы добавляете отслеживание в оператор привязки. - person HisDivineShadow; 08.11.2015