Используйте вычисляемое свойство , чтобы получить структуру данных, которая упрощает итерацию данных вашего события, сгруппированных по дате.В следующем коде используется Array.prototype.reduce()
для создания поиска Object
, ключом которого является дата, проанализированная из каждого события StartDateTime
, а значением является массив событий за соответствующую дату:
computed: {
eventDates() {
return this.events.reduce((p,c) => {
const date = new Date(c.StartDateTime).toDateString();
p[date] = p[date] || [];
p[date].push(c);
return p;
}, {});
}
},
Затем в вашем шаблоне используйте v-for
с этим Object
:
<ul class="days">
<li class="day" v-for="(events, date) in eventDates">
{{date}}
<ul class="events">
<li class="event" v-for="event in events">{{event.Name}}</li>
</ul>
</li>
</ul>
new Vue({
el: '#app',
data: () => ({
events: [
{
"Name": "Event 1",
"StartDateTime": "February 14, 2019 08:00:00"
},
{
"Name": "Event 2",
"StartDateTime": "February 14, 2019 09:00:00"
},
{
"Name": "Event 3",
"StartDateTime": "February 15, 2019 08:00:00"
}
]
}),
computed: {
eventDates() {
return this.events.reduce((p,c) => {
const date = new Date(c.StartDateTime).toDateString();
p[date] = p[date] || [];
p[date].push(c);
return p;
}, {});
},
}
})
<script src="https://unpkg.com/vue@2.6.5/dist/vue.min.js"></script>
<div id="app">
<ul class="days">
<li class="day" v-for="(events, date) in eventDates">
{{date}}
<ul class="events">
<li class="event" v-for="event in events">{{event.Name}}</li>
</ul>
</li>
</ul>
</div>