Опция angular js ui-select повторяет не работает для массива объектов

Я использую Angular ui-select. Моя модель и массив опций выбора пользовательского интерфейса отличаются. При изменении значения оно не обновляется и не отображает параметры. Я сохраняю идентификатор выбранного объекта в «pmpo», я хочу показать выбранный объект из массива объектов pmptnk при загрузке. Но не работает. Кто-нибудь подскажите, что я делаю не так.

Мой объект из модели

  pmpo:877
  pmptnk:[0:
    632:{id: "632",  pid: "2993", ESID: "9154", lb1: "Undddd", lb2: "219"}
    877:{id: "877",  pid: "2993", ESID: "9154", lb1: "Pcddd", lb2: "29"}
    654:{id: "654",  pid: "2993", ESID: "9154", lb1: "kukuu", lb2: "246"}]

Файл просмотра

 <div ng-if="item.pmptnk.length > 0">
    <ui-select ng-model="item.pmpo" click-out-side="closeThis($event)">
    <ui-select-match placeholder="Select " search-placeholder="Filter Tanks" 
    uib-tooltip="{{item.pmpo > 0 ? $select.selected.lb1 : 'Select Tank'}}" tab-select="true">
         <span ng-bind="$select.selected.lb1"></span>
    </ui-select-match>
    <ui-select-choices repeat="obj.tid as obj in (item.pmptnk[item.pmpo])">
        <span ng-bind="obj.lb1"></span>
    </ui-select-choices>
    <ui-select-no-choice>
      No results matched "{{$select.search}}"
    </ui-select-no-choice>
    </ui-select>

</div>

person Kavitha Velayutham    schedule 20.07.2017    source источник


Ответы (3)


Я работал над вашим кодом. Я пробовал его по-разному. Ниже мой фрагмент кода:

<div ng-if="item.pmptnk.length > 0">
        <ui-select ng-model="item.selected" click-out-side="closeThis($event)">
           <ui-select-match placeholder="Select " search-placeholder="Filter Tanks" uib-tooltip="{{item.pmpo > 0 ? $select.selected.lb1 : 'Select Tank'}}" tab-select="true">
              <span ng-bind="$select.selected.lb1"></span>
           </ui-select-match>
           <ui-select-choices repeat="obj.tid as obj in (item.pmptnk)">
              <span ng-bind="obj.lb1"></span>
           </ui-select-choices>
       <ui-select-no-choice>
            No results matched "{{$select.search}}"
       </ui-select-no-choice>
   </ui-select>

and i changed my model as below:

$scope.item = {};
    $scope.item.pmpo=877;
    $scope.item.pmptnk=[
    {id: "632",  pid: "2993", ESID: "9154", lb1: "Undddd", lb2: "219"},
    {id: "877",  pid: "2993", ESID: "9154", lb1: "Pcddd", lb2: "29"},
    { id: "654", pid: "2993", ESID: "9154", lb1: "kukuu", lb2: "246" }];
    for (var i = 0 ; i < $scope.item.pmptnk.length; i++) {
        if ($scope.item.pmptnk[i].id == $scope.item.pmpo) {
            $scope.item.selected = $scope.item.pmptnk[i].tid;
            break;
        }
    }

Это отлично сработало для меня.

person AkankshaGupta    schedule 20.07.2017

Согласно документам ui-select-choices, атрибут repeat

Укажите список элементов, которые следует предоставить в качестве вариантов. Синтаксис похож на ngRepeat.

И согласно ng-repeat doc

Можно заставить ngRepeat перебирать свойства объекта, используя следующий синтаксис:

<div ng-repeat="(key, value) in myObj"> ... </div>

Итак, из этого мы можем сделать вывод, что вам следует изменить свой синтаксис следующим образом:

<ui-select-choices repeat="obj.tid as obj in (item.pmptnk[item.pmpo])">

к этому:

<ui-select-choices repeat="(key, value) in (item.pmptnk[item.pmpo])">

где value будет 877, 2993 и так далее, а key будет id, pid и так далее.

person lealceldeiro    schedule 20.07.2017
comment
Спасибо за ответ. Я пробовал, как вы упомянули. Не повезло. ‹ui-select-choices repeat=(key, value) in (item.pmptnk[item.pmpo])› ‹span ng-bind=lb1›‹/span› - person Kavitha Velayutham; 20.07.2017
comment
Убедитесь, что (item.pmptnk[item.pmpo]) действительно является объектом. - person lealceldeiro; 20.07.2017
comment
В своем вопросе я показал структуру item.pmptnk. item.pmptnk — это массив объектов с ключом item.pmpo. - person Kavitha Velayutham; 20.07.2017
comment
журнал консоли: docs.angularjs.org/error/ui.select/ - person Kavitha Velayutham; 20.07.2017
comment
Это сообщение указывает на то, что это может быть одним из двух: один: синтаксис атрибута repeat похож на ngRepeat, но определенно НЕ принимает возможность перебора свойств объекта (в отличие от ngRepeat) или два: в структуре item.pmptnk[item.pmpo] есть ошибка. Если это будет первый случай, ребята из ui-select должны внести ясность в документы, и вам придется изменить структуру item.pmptnk[item.pmpo]. Если это не так, вы должны изменить структуру item.pmptnk[item.pmpo], чтобы исправить это. - person lealceldeiro; 20.07.2017
comment
@Sami, в этом случае было бы очень полезно, если бы вы могли предоставить нам минимальный, полный и проверяемый пример, если это возможно, может быть, plnkr или jsfiddle - person lealceldeiro; 20.07.2017

Разве это не должно быть ng-repeat вместо простого повторения?

 <ui-select-choices repeat="obj.tid as obj in (item.pmptnk[item.pmpo])">

изменить эту строку на следующую

<ui-select-choices ng-repeat="obj.tid as obj in (item.pmptnk[item.pmpo])">

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

person Abdul Aleem Khan    schedule 20.07.2017
comment
Вы спрашиваете или отвечаете? - person lealceldeiro; 20.07.2017
comment
@abdulAleem Khan Повтор будет работать. Проблема связана с циклом массива объектов. Если я изменяю свой массив на простой объект, он работает. - person Kavitha Velayutham; 20.07.2017
comment
Согласно документам, это должно быть repeat, а не ng-repeat - person lealceldeiro; 20.07.2017