vue.js - Datatable vuetify 选择多行(Shift+单击)
问题描述
我正在使用来自 Vuetify 1.5.x 的数据表
已启用复选框以便可以选择多行,我希望能够使用 Shift + Click 进行选择,这样我就不必单击与 Gmail 完全相同的每个复选框。
如果我有一个按排序更改的行 ID,或者在对数据表进行排序时对行数组进行了重新排序,那么这并不难。但这些似乎都不起作用。
有没有人通过 vuetify 数据表实现这一目标?
<template v-slot:items="props">
<tr :active="props.selected" @click="selectRow(props);">
<td>
<v-layout>
<v-flex>
<v-checkbox
:input-value="props.selected"
primary
hide-details
:class="{ 'red--text': props.item.was_modified_recently == 1 }"
></v-checkbox>
</v-flex>
</td>
</tr>
</template>
解决方案
我今天实际上必须解决这个问题。
我的解决方案依赖于使用item-selected
执行批量选择的钩子和方法。
methods: {
bulkSelect({ item: b, value }) {
const { selectedRows, current, shiftKeyOn } = this;
if (selectedRows.length == 1 && value == true && shiftKeyOn) {
const [a] = selectedRows;
let start = current.findIndex((item) => item == a);
let end = current.findIndex((item) => item == b);
if (start - end > 0) {
let temp = start;
start = end;
end = temp;
}
for (let i = start; i <= end; i++) {
selectedRows.push(current[i]);
}
}
},
}
所以这就是它的肉。还有其他的内务处理细节,例如跟踪何时按住 shift,并防止浏览器在按住 shift 并单击第二行时突出显示表格的文本。
我做了一个代码笔,在这里展示了这个功能。
推荐阅读
- django - Django:我应该在我的模型中将 Stripe 响应保存为 JSON 吗?
- selenium - Chrome 网络驱动程序:为 http DELETE 向 /session/XXX 抛出 Curl 错误
- java - Java For循环中的逻辑错误
- laravel - 更改变量名时显示未定义的变量
- angular - 如何在 Angular 4 的超链接中从 index.html 调用组件?
- akka - 无法在 OpenDaylight 中使用 Apache Ignite 持久性
- java - 如何使用 Java 在 MongoDB 中存储 Set?
- javascript - 如何增加和减少图像大小
- sql-server - TSQL 从表 A 中选择表 B 中每分钟时间戳至少有一条记录在表 B 中的行数
- angular5 - Owl Carousel 2 不适用于 Angular 5