2013-08-15 10 views
23

Я пытался использовать ng-options для отображения массива шрифтов в порядке сортировки в алфавитном порядке по значению элементов в массиве.AngularJS ngOptions sort array

HTML

<select ng-options="font for font in webfonts | orderBy:'font'" name="fonts"> 
    <option value="">Choose a font</option> 
</select> 

JS

$scope.webfonts = [ 
     'Abel', 'Crafty Girls' , 'Lato' , 'Average', 
     'Corben', 'Quicksand', ... ]; 

Я попытался изменить значение в orderBy и других вещей. Я прочитал documentation и все комментарии.

Что мне не хватает? Предполагается ли это, что он работает только с объектами?

ответ

47

Это то, что вам нужно сделать:

<select ng-model="selected" ng-options="font for font in webfonts | orderBy:'toString()' " name="fonts"> 
  1. Вам нужно добавить нг-модель, чтобы правильно сделать обязательные работы для списка строк.
  2. Вы можете использовать toString() для сортировки, если вход содержит список строк. Так как выражение orderBy может быть функцией Геттера. Результат этой функции будет отсортирован с использованием оператора <, =,>.

Demo

+0

Это работает! Благодаря! но почему это работает? Я запутался. –

+1

@ChrisB Поскольку 'toString()' доступен в любом объекте 'string' в прототипе. Это действительно трюк, и он заслуживает того, чтобы иметь в виду навсегда. – zsong

+2

Это работает, потому что '.toString()' является свойством строки в массиве 'webfonts', а' orderBy' ожидает свойство объекта ('font'). В то же время 'toString()' возвращает значение 'font', которое происходит именно так, что я хочу заказать. Это правильно? Правильно ли я это понимаю? –

3

Как указано в документации, аргумент строки предназначен для свойств объекта, а не для примитивов. Я думаю, что, как ни странно, вам нужно создать функцию в области, которая просто возвращает аргумент, и передать это значение orderBy.

См. jsFiddle!

+0

Это работает! Благодаря! но почему это работает? –

+0

Как указано в документации, вы можете передать имя функции, и результат ее использования в качестве значения сравнения! –