угловой порядокПо нескольким полям есть синтаксические ошибки

Я пытаюсь использовать angular orderBy для заказа нескольких полей, но получаю синтаксическую ошибку:

Синтаксическая ошибка, нераспознанное выражение: div[ng-repeat='r in vm.GetRequests() | фильтр: vm.SearchText | orderBy:['Фамилия','Имя']']

Вроде появляется дополнительный знак ']', но у меня его нет в html

HTML выглядит так:

<div ng-repeat="r in vm.GetRequests() | filter: vm.SearchText |orderBy:'RequestedOn'| orderBy:['LastName','FirstName']">
{{r.LastName}} : {{r.FirstName}}
</div>

функция GetRequests() возвращает массив объектов следующим образом:

[{FirstName:"Test1", LastName:"First"},{FirstName:"Test2",LastName:"Second"},{FirstName:"Test3",LastName:"Third"}]

Может ли кто-нибудь помочь мне с проблемой?

Изменение HTM - удалить orderBy: 'RequestedOn'

<div ng-repeat="r in vm.GetRequests() | filter: vm.SearchText | orderBy:['LastName','FirstName']">
{{r.LastName}} : {{r.FirstName}}
</div>

но я все еще получаю синтаксическую ошибку:

Uncaught Error: Syntax error, unrecognized expression: div[ng-repeat='r in vm.GetRequests() | filter: vm.SearchText | orderBy:['LastName','FirstName']'] 

ОБНОВЛЕНИЕ

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

Большое спасибо всем за участие, особенно спасибо за RishiPrakash :)


person echo    schedule 29.12.2014    source источник
comment
попробуйте ‹div ng-repeat=r в vm.GetRequests() | фильтр: vm.SearchText | orderBy:['RequestedOn','LastName','FirstName']›   -  person Rishi    schedule 29.12.2014
comment
видите, в ошибке его ,orderBy : RequestedOn нет, ошибка должна быть связана с ним.   -  person Rishi    schedule 29.12.2014
comment
@ Риши Пракаш - я удаляю первый orderBy: 'RequestedOn', но я все равно получаю эту ошибку: Uncaught Error: Синтаксическая ошибка, нераспознанное выражение: div[ng-repeat='r in vm.GetRequests() | фильтр: vm.SearchText | orderBy:['Фамилия','Имя']']   -  person echo    schedule 29.12.2014
comment
что последнее ] на самом деле является концом div[ng-repeat in error , по крайней мере, эта загадка решена   -  person Rishi    schedule 29.12.2014
comment
@ Риши Пракаш - теперь я вижу, что последний ']' - это конец тега ошибки, теперь я не понимаю, почему я все еще получаю синтаксическую ошибку. Я уже обновил HTML   -  person echo    schedule 29.12.2014
comment
Я обновил свой ответ, там должен быть vm.SearchText(), а не vm.SearchText.   -  person Rishi    schedule 29.12.2014
comment
@Rishi Prakash - я так не думаю, потому что vm.SearchText - это просто строка ng-модели, у меня есть этот HTML для фильтрации: ‹input type=text ng-model=vm.SearchText /›, но даже я удаляю |filter: vm.SearchText , я все равно получаю ту же ошибку   -  person echo    schedule 29.12.2014
comment
Давайте продолжим это обсуждение в чате.   -  person Rishi    schedule 29.12.2014
comment
@RishiPrakash: Большое спасибо за вашу помощь, и, похоже, проблема связана с браузерной ссылкой.   -  person echo    schedule 15.01.2015


Ответы (2)


Я думаю, что этот фильтр работает только с массивами и не оценивает функции. Я бы назначил запрос переменной области видимости в контроллере:

js:

$scope.requests = vm.GetRequests();


html:

<div ng-repeat="r in requests | filter: vm.SearchText | orderBy:['RequestedOn','LastName','FirstName']"> {{r.FirstName }}, {{r.LastName}} </div>



примечание: я не думаю, что есть проблема со способом сортировки массива, хотя я предпочитаю объединять их в одно выражение orderBy, как предложил Риши Пракаш.

person Nizar    schedule 29.12.2014
comment
У меня нет проблем, если у меня есть только одна строка, например orderBy: 'RequestedOn', она работает для упорядочения на основе свойства RequestedOn, а также работает, если я использую orderBy: 'RequestedOn' | orderBy: 'Имя'. Но это не работает, если используется массив, например порядок: ['RequestedOn','FirstName','LastName'] --- как я сказал, "RequestedOn" не является причиной синтаксической ошибки - person echo; 29.12.2014
comment
Я сказал, что проблема в vm.GetRequests(), а не в RequestedOn. Выражение orderBy в порядке. - person Nizar; 29.12.2014
comment
я использую typescript, и сгенерированный javascript для функции GetRequests() выглядит так: ModelName.prototype.GetRequests = function() {...}, я думаю, что это то же самое, что вы имеете в виду для $scope .requests = vm.GetRequests(), не так ли? - person echo; 29.12.2014
comment
Я имел в виду, что ng-repeat не будет работать так, как вы, используйте переменную области видимости, если вам действительно не нужна функция. для получения более подробной информации см. этот пост, он поможет вам: stackoverflow.com/questions/12336897/ - person Nizar; 29.12.2014

попробуй <div ng-repeat="r in vm.GetRequests() | filter: vm.SearchText() | orderBy:['RequestedOn','LastName','FirstName']">

filter:vm.SearhText должен быть функцией, поэтому () в конце.

person Rishi    schedule 29.12.2014
comment
RequestedOn также является свойством объекта и является моментальным объектом. Сначала я подумал, что, может быть, в тот момент объект не может быть отсортирован, поэтому я не помещаю его в выходной массив. Но это не причина, я все еще получаю ту же ошибку - person echo; 29.12.2014
comment
скажите мне значение момента объекта? - person Rishi; 29.12.2014
comment
@ Риши Пракаш - и еще одна причина, по которой я помещаю RequestedOn в отдельный порядок, заключается в том, что массив не исправляет порядок свойств LastName и FirstName, если я помещаю RequestedOn также в массив порядка - person echo; 29.12.2014
comment
эти два объекта имеют следующий момент: 1. d: пн, 27 октября 2014 г., 16:27:30 GMT+0100 (стандартное романское время)_f: YYYY-MM-DDTHH:mm:ss_i: 2014-10-27T16:27:30_isAMomentObject: true_isUTC: false_locale: Locale_pf: Object__proto_: Момент и 2. d: Пн, 27 октября 2014 г., 10:00:00 GMT+0100 (Романское стандартное время)_f: ГГГГ-ММ-ДДЧЧ:мм:сс_i: 2014-10-27T10: 00:00_isAMomentObject: true_isUTC: false_locale: Locale_pf: Object__proto_: Момент - person echo; 29.12.2014
comment
Хорошо, я создал jsfiddle jsfiddle.net/U3pVM/11581, можете ли вы создать случай там ? - person Rishi; 29.12.2014
comment
@ Риши Пракаш - я знаю, что это работает в jsfiddle, я пробовал это в Plunker на основе документа для orderBy в AngularJS API. Он работает нормально, но я просто не понимаю, почему я получаю синтаксическую ошибку - person echo; 29.12.2014