2015-06-07 3 views
1

У меня есть выпадающий список в моем angular.js как веб-приложение:сортировки не работает ниспадающего меню

<select ng-model="script" 
     ng-options="s as s[1].shortDescription for s in objs | orderBy:'toString()'" 
     ng-change="updateParam()"> 
</select> 

где объекты в массиве типа

["test1", {shortDescription: "first test", longDescription: "AAAAAAAA"}] 

Я хочу, чтобы сортировать по shortDescription свойство каждой записи. Проблема в том, что сортировка не работает.

Update1

Выборочные данные

["test1", {shortDescription: "first test", longDescription: "AAAAAAAA"}] 
["test2", {shortDescription: "2nd test", longDescription: "BBBB"}] 
["test3", {shortDescription: "3rd test", longDescription: "CCCC"}] 
+0

Индекс массива в ng-вариантах выглядит подозрительно. За OrderBy должно следовать имя свойства. –

ответ

0

Похоже, что вы хотите следующее

| orderBy: 'shortDescription' 

Где вы сортировкой по свойству shortDescription. Дополнительную информацию см. На странице orderBy docs. Вот простейший пример демонстрирует это ...

<select ng-model="script" 
     ng-options="s as s.shortDescription for s in objs | orderBy: 'shortDescription'"> 
</select> 

$scope.objs = [{shortDescription: "first test", longDescription: "AAAAAAAA"}, 
       {shortDescription: "aaa short", longDescription: "BBBBBB"}] 

JSFiddle Link - рабочий пример

+0

спасибо за ваше предложение. Удивительно, если есть обходной путь, когда мы не меняем формат массива объектов? Благодарю. – packetie

+0

@codingFun вы можете разместить свои данные с несколькими записями? Возможно, я неправильно понимаю вашу структуру. – scniro

+0

просто добавил вопрос обновления с несколькими записями. Благодарю. – packetie

0

Подобно тому, как @sal Niro демонстрирует, то OrderBy фильтр работает на объектах (порядка по свойству объекта) ваши данные образца показывают, что вы выполняете итерацию по массиву массива, который в первой позиции содержит строку, а во втором - объект, забудьте об объекте, у вас есть массив массивов, который он не имеет имеют свойства, просто элементы, нет, вы не можете ell фильтр для заказа по свойству одного из элементов массива, насколько я знаю :).

Наилучшее возможное решение состоит в том, чтобы преобразовать массив массивов в массив объектов, в котором каждый объект имеет заголовок, shortDescription и longDescription.

{ 
    title: 'test1', 
    shortDescription: 'a', 
    longDescription: 'aaaaaaaa' 
} 
+0

Я принял боль и внес изменения в формат данных, и теперь он работает нормально. Спасибо вам и @sal niro. – packetie

+0

Я не понимаю, как это принятый ответ. Вопрос состоял в том, как отфильтровать элементы в 'ng-options', на которые ссылаются мои ответы. Это предложение касалось незначительной озабоченности вашей структурой данных, которую вам нужно было изменить в любом случае, как вы видели в моем ответе. @codingFun – scniro

+0

@sal niro, хочу, чтобы я мог ответить на оба ответа :-) Я принял этот ответ, потому что он заставил меня принять боль и изменить формат из '[" test1 ", {shortDescription:" a ", longDescription:" aaaaaaa "}]' в формат '{title: 'test1', shortDescription: 'a', longDescription: 'aaaaaaaa'}'. – packetie

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