@ekzotika

Как сделать группировку в таблице с Vue.js?

Пытаюсь сделать группировку таблицы. Есть массив Customers, по которым хочу группировать, и массив dataTable, в котором есть поле customer. Подскажите, что я неправильно делаю? Сейчас у меня выводятся друг за другом Customer-ы, а за ними уже вся таблица. Нужно чтобы за каждым Customer выводились данные, где customer - он, далее следующий и т.д.

<table class="table" ref="table">
                <thead>
                    <tr>
                        <th>ID</th>
                        <th>Address</th>
                        <th>Customer</th>
                        <th>Distributor</th>
                        <th>Email</th>
                        <th>Site</th>
                        <th>State</th>
                        <th>Edit</th>
                        <th>Delete</th>
                    </tr>
                </thead>
                <tr v-for="customer in customers">
                    <td colspan="8"><h4>{% verbatim %}{{ customer.name }}{% endverbatim %}</h4></td>
                </tr>
                <tr v-for="item in dataTable">
                        <td>{% verbatim %}{{ item.id }}{% endverbatim %}</td>
                        <td v-if="item.address.sub_locality"> {% verbatim %}{{ item.address.sub_locality }}, {{ item.address.raw_data }}{% endverbatim %}</td>
                        <td v-if="!item.address.sub_locality"></td>
                        <td>{% verbatim %}{{item.customer.name}}{% endverbatim %}</td>
                        <td>{% verbatim %}{{item.distributor.name}}{% endverbatim %}</td>
                        <td v-if="item.email !== 'nan'">{% verbatim %}{{item.email}}{% endverbatim %}</td>
                        <td v-if="item.email == 'nan'"></td>
                        <td>{% verbatim %}{{item.site}}{% endverbatim %}</td>
                        <td>{% verbatim %}{{item.state.name}}{% endverbatim %}</td>
                        <td><a><i class="glyphicon glyphicon-pencil" @click="showModalToEdit(item.id, item.address, item.email, item.site, item.customer, item.distributor, item.state)"></i></a></td>
                        <td><a @click="deleteItem(item.id)"><i class="ion-trash-a"></i></a></td>
                </tr>

            </table>
  • Вопрос задан
  • 679 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
Сделайте вычисляемое свойство, где и будет осуществляться группировка:

computed: {
  grouped() {
    return this.dataTable.reduce((acc, n) => {
      (acc[n.customer.name] = acc[n.customer.name] ?? []).push(n);
      return acc;
    }, {});
  },
},

<template v-for="(items, customer) in grouped">
  <tr>
    ...
  </tr>
  <tr v-for="item in items">
    ...
  </tr>
</template>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы