2016-02-16 3 views
0

Я пытаюсь создать отчет на основании объекта, который хранит структуру многоуровневой как:Угловое ngOptions с OrderBy на основе объекта

{ "reptype0": {"index":0, "value":{...}},"reptype1": {"index":1, "value":{...}},....} 

для использования в теге с угловым ngOptions, как:

<select id="repType" 
     name="repType" 
     ng-model="representationType.rtmodel" 
     ng-options="reptype for (reptype,repsubtypes) in representationTypes"> 
    <option value=''>--select a value--</option> 
</select> 

Я пытаюсь выяснить, как заказать опции по значению «индекс» атрибут, но я не могу заставить работать «OrderBy», как он ищет массив.

+0

Опубликовать JSFIDDLE? –

ответ

0

Как вы уже нашли, orderBy ищет массив, а не объект. Всякий раз, когда я сталкивался с этой проблемой, я всегда преобразовывал объект в массив и использовал его.

Контроллер

$scope.getRepresentationTypesArray = getRepresentationTypesArray; 

function getRepresentationTypesArray() { 
    var representationTypes = {}; 

    angular.forEach($scope.representationTypes, function (type, subTypes) { 
    representationTypes[type] = []; 

    angular.forEach(subTypes, function (subType) { 
     representationTypes[type][subType.index] = subType.value; 
    }); 
    }); 

    return representationTypes; 
} 

Посмотреть

<select id="repType" 
     name="repType" 
     ng-model="representationType.rtmodel" 
     ng-options="reptype for (reptype,repsubtypes) in getRepresentationTypesArray()"> 
    <option value=''>--select a value--</option> 
</select> 

Метод getRepresentationTypesArray() будет возвращать данные в форму:

{ "reptype0": [ {...} ], "reptype1": [ {...} ], ....} 

с данными, уже отсортированных по указатель для использования непосредственно в вашем ng-options.

Смежные вопросы