Я не совсем уверен, как описать проблему, с которой я столкнулся, или даже если это проблема. Думаю, у меня проблемы с пониманием того, как работают директивы Angular. Приветствуются любые советы и/или мнения о передовом опыте.
У меня есть простой массив объектов в $scope моего контроллера:
$scope.birthdays = [
{ name: "bob", dob:moment("09/20/1953"), cake: "vanilla"},
{ name: "michael", dob:moment("09/20/1953"), cake: "chocolate" },
{ name: "dave", dob:moment("09/20/1953"), cake: "chocolate" },
{ name: "chief", dob:moment("04/24/1977"), cake: "chocolate" },
{ name: "jerry", dob:moment("04/24/1977"), cake: "red velvet" },
{ name: "jerkface", dob:moment("04/24/1977"), cake: "i hate cake" },
{ name: "doug", dob:moment("05/10/1994"), cake: "marble" },
{ name: "jeff", dob:moment("05/10/1994"), cake: "vanilla" }
];
Скажем, я хотел бы создать структуру DOM из этой модели данных:
<h1>Birthday: 09/20/1953</h1>
<div class="birthday">
<h2>Name: bob</h2>
<h3>Cake: vanilla</h3>
</div>
<div class="birthday">
<h2>Name: michael</h2>
<h3>Cake: chocolate</h3>
</div>
<div class="birthday">
<h2>Name: dave</h2>
<h3>Cake: chocolate</h3>
</div>
<h1>Birthday: 04/24/1977</h1>
<div class="birthday">
<h2>Name: chief</h2>
<h3>Cake: chocolate</h3>
</div>
....
Я могу добиться чего-то близкого к этому в этом плункере.
Однако там я получаю немного другую структуру DOM, которая мне не нужна.
<div ng-repeat="birthday in birthdays" birthday-boy="">
<h3 ng-show="!birthdays[$index-1].dob.isSame(birthday.dob)" class="ng-binding" style="">
September 20th, 1953
</h3>
<div class="ng-binding">
Name: bob
</div>
<div class="ng-binding">
Cake: vanilla
</div>
</div>
<div ng-repeat="birthday in birthdays" birthday-boy="">
<h3 ng-show="!birthdays[$index-1].dob.isSame(birthday.dob)" class="ng-binding" style="display: none;">
September 20th, 1953
</h3>
<div class="ng-binding">
Name: michael
</div>
<div class="ng-binding">
Cake: chocolate
</div>
</div>
<div ng-repeat="birthday in birthdays" birthday-boy="">
<h3 ng-show="!birthdays[$index-1].dob.isSame(birthday.dob)" class="ng-binding" style="">
April 24th, 1977
</h3>
<div class="ng-binding">
Name: chief
</div>
<div class="ng-binding">
Cake: chocolate
</div>
</div>
Итак, мои вопросы:
- Правильно ли я думаю об этой проблеме? Должен ли я изменять свою структуру данных, чтобы группировать ее по датам, а затем просто повторять ng-repeat для каждой отдельной даты?
- Если есть способ сделать это с моей существующей структурой данных, нужно ли мне изменять DOM за пределами директивы Birthday-boy / ng-repeat?
- Есть ли способ обернуть директиву ng-repeat во что-то пользовательское - я начал изучать функцию компиляции, но просто не уверен...
Спасибо!
birthdays
). - person Stewie   schedule 18.03.2013