Aderus
@Aderus

Почему глючит select в angular при выборе?

Здравствуйте! При выборе некоторых пунктов из списка, выбирается совсем другой. Допустим мы выбрали на "Толщина 4-6" все норм, "Толщина 8" все норм и т.д. ,но когда выбираем "Толщина 15-19" выбирается "Толщина 12" или вообще другой. В итоге select работает хаотично. Не могу понять почему так происходит.
Вот ссылка plnkr.co/edit/5F7nWMOHafIp9GNucqwD?p=preview , пощелкайте select и увидите этот глюк.
  • Вопрос задан
  • 408 просмотров
Решения вопроса 2
Vadiok
@Vadiok
Веб разработчик
Проблема в следующем месте:
<select ... ng-options="value.price as value.name group by value.group for value in holes" ...>
...

У вас за выбранный параметр принимается value.price: value.price as value.name, а это неуникальный параметр. В итоге при выборе пункта выбирается последний элемент, у которого указанная цена равна выбранному значению.

Решение: заменить value.price as value.name на value.id as value.name.

Почему происходит то, что вы называете глюком: при выборе элемента берется его цена и это значение назначается селекту и все. Т.е. на jQuery это выглядело бы так:
$('select').val(190);
Ответ написан
werevolff
@werevolff
Потому, что цена выступает идентификатором. Вот рабочая версия:
plnkr.co/edit/5BYQ1frKklCpvMDzilRa?p=preview

function OrderFormController($scope){
  
/*Массив отверстий*/
$scope.holes = [
{id: 208,group: "Диаметр отверстия 5-10мм",name: 'Толщина 4-6',price: 60,active:false},
{id: 209,group: "Диаметр отверстия 5-10мм",name: 'Толщина 8',price: 90,active:false},
{id: 210,group: "Диаметр отверстия 5-10мм",name: 'Толщина 10',price: 140,active:false},
{id: 211,group: "Диаметр отверстия 5-10мм",name: 'Толщина 12',price: 140,active:false},
{id: 212,group: "Диаметр отверстия 5-10мм",name: 'Толщина 15-19',price: 190,active:false},  
{id: 213,group: "Диаметр отверстия 11-16мм",name: 'Толщина 4-6',price: 65,active:false},
{id: 214,group: "Диаметр отверстия 11-16мм",name: 'Толщина 8',price: 100,active:false},
{id: 215,group: "Диаметр отверстия 11-16мм",name: 'Толщина 10',price: 190,active:false},
{id: 216,group: "Диаметр отверстия 11-16мм",name: 'Толщина 12',price: 190,active:false},
{id: 217,group: "Диаметр отверстия 11-16мм",name: 'Толщина 15-19',price: 210,active:false}
];
/*--------*/
  
/*Выбор отверстия*/
$scope.hole = 0;
$scope.total_hole = function () {
  var t_h = $scope.hole.price;       
  return t_h;
}
/*--------*/  
  
}


<div ng-controller="OrderFormController" ng-app="">
      <select ng-model="hole" ng-options="value.name group by value.group for value in holes" class="form-control input-md">
        <option value="">--- Не выбрано ---</option>
      </select>
      <p> Цена: {{total_hole()}} </p>
    </div>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы