2014-08-27 2 views
0

Ниже критерии сортировки от А до Я: 1) специальные символы 2) номер 3) алфавитПользовательской сортировка с использованием OrderBy директивы угловых

For example:-

$scope.cards = ["815 BRAZOS ST AUSTIN TX 78701","7745 CHEVY CHASE DR AUSTIN TX 78752","701 BRAZOS ST AUSTIN TX 78701","555 ROUND ROCK WEST DR ROUND ROCK TX 78681","400 W 15TH ST AUSTIN TX 78701"] 

Expected result after sorting:-

400 W 15TH ST AUSTIN TX 78701 
555 ROUND ROCK WEST DR ROUND ROCK TX 78681 
701 BRAZOS ST AUSTIN TX 78701 
815 BRAZOS ST AUSTIN TX 78701 
7745 CHEVY CHASE DR AUSTIN TX 78752 

Я хочу достичь этого с помощью Углового фильтра orderBy. Как и в пользовательской функции сортировки JS, мы получили два аргумента и, манипулируя этим, мы можем вернуть> 0, < 0 и 0 для достижения пользовательской сортировки.

Моя попытка

<div ng-controller="MyCtrl"> 
    <ul ng-repeat="card in cards | orderBy:myValueFunction"> 
     <li>{{card}}</li> 
    </ul> 
</div> 

JS

var myApp = angular.module('myApp', []); 

function MyCtrl($scope) { 
    $scope.cards = ["815 BRAZOS ST AUSTIN TX 78701","7745 CHEVY CHASE DR AUSTIN TX 78752","701 BRAZOS ST AUSTIN TX 78701","555 ROUND ROCK WEST DR ROUND ROCK TX 78681","400 W 15TH ST AUSTIN TX 78701"] 

    $scope.myValueFunction = function(card,card1) { 
     console.log(card); 
     console.log(card1); 
     return card; 
    } 
} 

JSfiddle link

Благодаря

ответ

4

Согласно documentation вы Функция r должна возвращать значение, которое будет использоваться для сортировки с использованием стандартных операторов сравнения (<,>, =).

Так что в вашем случае ваша функция должна возвращать значение, которое определяло бы сортировку. Для вашего случая вам нужно поставить некоторую передовую логику для создания такой ценности.

Для примера простейшем (сортировка по первым номерам), вы получите:

$scope.myValueFunction = function(card) { 
     return card.split(' ')[0]|0; 
} 

По крайней мере, вы будете иметь то, что вы просили в вашем маленьком образце, смотрите здесь: http://jsfiddle.net/zjvsu/529/

ОБНОВЛЕНО

Если вы хотите сравнить два значения, как стандартную функцию сортировки javascript, то вам придется использовать собственный фильтр, который возвращает отсортированный массив.

+0

Но как я могу сравнить? Как и в стандартном javascript-сортировке, мы получили два аргумента для сравнения, но в угловом мы получаем только текущее значение. см. обновленную скрипту http://jsfiddle.net/zjvsu/534/ –

+0

, используя стандартный фильтр 'orderBy', который вы не можете. Но вы можете создать собственный фильтр, который будет создавать отсортированный массив. –

+0

Спасибо, пожалуйста, отредактируйте свой ответ так или иначе, чтобы я мог удалить свой минус. –

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