2016-12-05 1 views
0

У меня есть список заметок прогресса (коллекция простых объектов), на этом скриншоте первые три были в модели, а последний был добавлен в модель, используя команда нажать:AngularJS orderBy не работает после ввода новых элементов в массив

enter image description here

В HTML это presenttion определяются следующим образом:

<div ng-repeat="item in vm.data.ProgressNotes|orderBy:'-Date'"> 

обращенных сортировать по дате, самые последние находятся на вершине.

Новый объект добавляется к коллекции, как это:

data.ProgressNotes.push({ 
    Note: progressNote, 
    UserName: ctx$.uName, 
    Date: new Date() 
}); 

Пример фрагмента модели vm.data.ProgressNotes:

enter image description here

Вопрос: Почему не отображается новый элемент сверху, orderBy не работает для элементов, добавленных с помощью push?

+0

Можете ли вы разместить данные в модели? Мне интересно, отличается ли формат даты. –

+0

@ Anthony C добавлен образец модели – monstro

+2

Вы используете строку в образце модели, но используете объект даты, когда добавляете новую запись. –

ответ

2

У вас есть другой тип данных для даты в объекте заметки. В модели она представлена ​​как строка, но когда вы нажимаете новую заметку в массив, новая нота имеет дату как тип даты Date: new Date(). Когда угловой порядок с помощью разных типов данных, сравнение выполняется внутри значений в тех же типах, а затем сравнивает сами типы в алфавитном порядке. Я создал плункер, чтобы продемонстрировать это поведение.

https://plnkr.co/edit/qiKHuRWqI7YR1gJKMvOL?p=preview

+0

Спасибо! Ты прав. – monstro

0

Как уже упоминались, тип Date собственности в данной выборке является строкой. Вам нужно будет изменить данные выборки, чтобы сделать свойства Date типа Date.

Вы можете сделать что-то вроде этого:

ProgressNotes.forEach(function(progress_note){ 
    progress_note.Date = new Date(progress_note.Date); 
}); 

Так что теперь выборочные данные также будут иметь Date свойство типа Date.