#vue.js #datatable #vuetify.js
#vue.js #datatable #vuetify.js
Вопрос:
Я попытался настроить заголовок таблицы данных vuetify с помощью слота. Я отключил заголовок по умолчанию и создал новый заголовок v-slot:header
. Проблема в том, что если я создам новый заголовок, нет флажка, который поддерживает функциональность toggleSelectAll. Код приведен ниже.
<template
v-slot:header="{ props: { headers } }"
>
<thead>
<tr>
<th v-for="header in headers" :key="header.value">
<v-simple-checkbox
color="purple"
v-if="header.value === 'data-table-select'"
></v-simple-checkbox>
<span v-else>{{header.text}}</span>
</th>
</tr>
</thead>
</template>
И вот ссылка на Codepen.
https://codepen.io/em0809/pen/gOrJGjJ
Я хочу добавить функциональность toggleSelectAll к простому флажку выше. Я пробовал v-slot:header.data-table-select
, но это не работает.
Итак, пожалуйста, помогите мне с этим, если у вас есть опыт.
Спасибо.
Ответ №1:
Вы можете достичь этого за 1 шаг:
- Добавить
@input="on['toggle-select-all']"
в свойv-simple-checkbox
.
<template #header="{ props, on }">
<thead>
<tr>
<th v-for="header in props.headers" :key="header.value">
<v-simple-checkbox
v-if="header.value === 'data-table-select'"
v-model="props.everyItem"
:indeterminate="props.someItems amp;amp; !props.everyItem"
color="purple"
@input="on['toggle-select-all']"
></v-simple-checkbox>
<span v-else>{{ header.text }}</span>
</th>
</tr>
</thead>
</template>
#header
перезаписать #header.data-table-select
, когда оба они используются.
Комментарии:
1. Вау, это точный ответ, который я искал. Я хотел использовать метод toogle-select-all.
Ответ №2:
Вы можете достичь этого за 4 шага:
- Добавьте
ref
в свой компонент v-data-table - Передайте дополнительные реквизиты v-data-table в слот заголовка
- Настройте свой
v-model
(иindeterminate
поддержите, если необходимо) - Создайте метод «selectAll», который должен вызываться
toggleSelectAll
по ссылке
Пример кода показан ниже:
<v-data-table
ref="table"
:value="selected"
:items-per-page="itemsPerPage"
:headers="headers"
:items="desserts"
item-key="name"
show-select
class="elevation-1"
hide-default-header
>
<template v-slot:header="{ props: { headers, ...props } }">
<thead>
<tr>
<th v-for="header in headers" :key="header.value">
<v-simple-checkbox
v-model="props.everyItem"
:indeterminate="props.someItems amp;amp; !props.everyItem"
color="purple"
v-if="header.value === 'data-table-select'"
@input="selectAll"
></v-simple-checkbox>
<span v-else>{{header.text}}</span>
</th>
</tr>
</thead>
</template>
</v-data-table>
...
methods: {
selectAll(val) {
this.$refs.table.toggleSelectAll(val)
}
}
...
Комментарии:
1. Это сработало, как и ожидалось. Я соответствующим образом обновил Codepen.
2. Привет @ dreamwalker, ваше решение также решает проблему, но я думаю, что было бы лучше использовать
@input="on['toggle-select-all']"
3. Да, я думаю, ответ @denisemenov должен быть лучше, потому что он не имеет отношения к
ref
🙂