Тем не менее эта проблема Angular.js более сложные условные циклы, но я чувствовал, что ответ на заданный вопрос был правильным, поэтому Я принял это.
Итак, позвольте мне уточнить больше, чем я сделал в исходном вопросе.
я пытаюсь получить это
<h3>11.4.2013</h3>
<ul>
<li>oofrab | 4 | 11.4.2013 14:55 <button>remove</button></li>
<li>raboof | 3 | 11.4.2013 13:35 <button>remove</button></li>
</ul>
<h3>10.4.2013</h3>
<ul>
<li>barfoo | 2 | 10.4.2013 18:10 <button>remove</button></li>
<li>foobar | 1 | 10.4.2013 12:55 <button>remove</button></li>
</ul>
из этой структуры данных
[
{
"id": 4,
"name": "oofrab",
"date": "2013-11-04 14:55:00"
},
{
"id": 3,
"name": "raboof",
"date": "2013-11-04 13:55:00"
},
{
"id": 2,
"name": "barfoo",
"date": "2013-10-04 18:10:00"
},
{
"id": 1,
"name": "foobar",
"date": "2013-10-04 12:55:00"
}
]
По сути, единственное дополнение к стандартному ng-repeat
, которое я хочу добавить, это заголовки. И я просто не могу поверить, что мне пришлось бы преодолевать столько проблем, добавляя их.
Вот к чему я пришел, используя ответ, полученный в первом вопросе http://plnkr.co/edit/Zl5EcsiXXV92d3VH9Hqk?p=preview
Обратите внимание, что реально может быть до 400 записей. И мне нужно иметь возможность добавлять/удалять/редактировать записи на лету
Вот что делает пример на plunker:
итерация исходных данных с созданием новой структуры данных, похожей на эту
{
"2013-10-05": [
{
"id": 4,
"name": "oofrab",
"date": "2013-10-05 14:55:00",
"_orig_index": 0
},
{
"id": 3,
"name": "raboof",
"date": "2013-10-05 13:55:00",
"_orig_index": 1
}
],
"2013-10-04": [
{
"id": 2,
"name": "barfoo",
"date": "2013-10-04 18:10:00",
"_orig_index": 2
},
{
"id": 1,
"name": "foobar",
"date": "2013-10-04 12:55:00",
"_orig_index": 3
}
]
}
позволив мне затем получить желаемый результат
<div ng-repeat="(date,subItems) in itemDateMap">
<h3>{{date}}</h3>
<ul>
<li ng-repeat="item in subItems">
{{item.name}} | {{item.id}} | {{item.date}}
<button type="button" ng-click="removeItem(item._orig_index)">x</button>
</li>
</ul>
</div>
Отлично. Но за это приходится платить кучу проблем. Каждый раз, когда добавляется новый элемент, мне приходится перестраивать itemDateMap
, каждый раз, когда элемент удаляется, мне приходится перестраивать itemDateMap
, каждый раз, когда меняется дата, мне приходится перестраивать itemDateMap
. Когда я хочу удалить элемент, я должен сначала получить индекс его исходной ссылки. И каждый раз, когда itemDateMap
перестраивается, все это перерисовывается. И его нельзя отсортировать, так как это объект, а не массив.
Когда есть пара сотен записей, это также становится очень, очень медленным. Я где-то читал, что ng-repeat довольно умный, отслеживает значения, перемещает кивки в dom, а не перерисовывает все и прочее, но это точно не работает, когда я перестраиваю всю структуру.
Этого не может быть, все эти хлопоты, чтобы сделать очень, очень простую вещь..
Что я должен делать?