Как получить выбранное значение из ui-selects в ng-repeat

Я добавляю выбор пользовательского интерфейса с помощью ng-repeat, но я не знаю, как получить значение от каждого выбора пользовательского интерфейса отдельно в контроллере. Я хочу получить значение выбранного элемента в контроллере для использования в качестве параметров для отправки запроса $http.

<div ng-repeat="repeat in repeats">
   <p>Selected: {{pattern.selected.name}}</p>
   <ui-select ng-model="repeat.id">
<ui-select-match placeholder="Enter an pattern...">{{$select.selected.name}}</ui-select-match>
<ui-select-choices repeat="pattern in data_pattern_newspapers track by $index">
  <div ng-bind-html="pattern.name | highlight: $select.search"></div>
</ui-select-choices>

Я хочу сделать что-то, как показано ниже, в моем контроллере:

alert($scope.repeat.id.selected)

Как я могу получить доступ к модели каждого пользовательского интерфейса в моем контроллере?

Мой plnkr

Пожалуйста, помогите мне. Благодарность!


person omid nematollahi    schedule 26.02.2017    source источник
comment
ваш ng-model на repeat.id изменяет значение id с его начального значения на значение того, что вы выбираете в раскрывающемся списке. это может быть или не быть тем, что вы хотите; вероятно, это не так, поскольку ваши выборки привязывают объект: plnkr.co/edit/sOrXVNiUQaj5HO3TKJyH? р=предварительный просмотр   -  person Claies    schedule 26.02.2017
comment
чтобы другим было легче предлагать альтернативы, вы можете объяснить, для чего вы планируете использовать эти значения.   -  person Claies    schedule 26.02.2017
comment
@Claies Я хочу получить значение выбранного элемента в контроллере для использования в качестве параметров для отправки запроса $http. Итак, что я должен сделать в контроллере, чтобы получить этот выбранный элемент?   -  person omid nematollahi    schedule 26.02.2017


Ответы (1)


В вашем html используйте свойство $index ngRepeat для создания уникальной модели для каждого ui-select и передайте $index в функцию ngChange:

<ui-select ng-model="selections[$index]" ng-change="selectionChanged($index)">

В вашем контроллере инициализируйте массив для хранения выбранных значений и добавьте указанную выше функцию, получающую $index для ссылки на этот массив:

$scope.selections = [];

$scope.selectionChanged = function(idx) {
  console.log(idx, $scope.selections[idx]);
};

Теперь $scope.selections — это массив их выборок по мере того, как они их делают.

демо: http://plnkr.co/edit/NSK3UmelATopV0Juw8BV?p=preview

person K Scandrett    schedule 28.02.2017
comment
Обратите внимание, что функция ngChange не требуется — вы можете просто ссылаться на $scope.selections, когда захотите, но я предполагаю, что вы, вероятно, захотите предпринять какое-то действие, когда их выбор изменится. Однако ключ в том, чтобы использовать $index: ng-model="selections[$index]" - person K Scandrett; 28.02.2017
comment
Да, точно. работал отлично. Благодарность! @К Скандретт - person omid nematollahi; 28.02.2017