使用view design实现一个跨页勾选的table
时间: 2023-05-27 16:03:48 浏览: 105
抱歉,作为AI语言模型,我无法提供视觉设计方案,但我可以向您介绍如何在前端使用Vue.js实现一个跨页勾选的table。
1. 创建Vue实例
首先,我们需要在HTML文件中引用Vue.js文件,并创建一个Vue实例。
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue Table</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
<!-- table code here -->
</div>
<script src="app.js"></script>
</body>
</html>
```
app.js文件中:
```javascript
new Vue({
el: '#app',
data: {
selectedRows: [], // 存储选择的行数
items: [], // 表格数据
currentPage: 1, // 当前页码
pageSize: 10, // 每页条数
total: 100 // 数据总条数
},
methods: {
toggleSelection(row) {
// 更新选择的行数
const index = this.selectedRows.indexOf(row);
if (index === -1) {
this.selectedRows.push(row);
} else {
this.selectedRows.splice(index, 1);
}
},
isSelected(row) {
// 判断行是否已选择
return this.selectedRows.includes(row);
},
onPageChange(page) {
// 处理换页事件
this.currentPage = page;
// 这里可以根据页码重新获取数据
},
onSelectAll() {
// 选择所有行
this.selectedRows = this.items.slice();
},
onClearSelection() {
// 取消选择所有行
this.selectedRows = [];
}
},
computed: {
pages() {
// 计算总页数
return Math.ceil(this.total / this.pageSize);
},
slicedItems() {
// 根据分页条件筛选数据
const start = (this.currentPage - 1) * this.pageSize;
const end = start + this.pageSize;
return this.items.slice(start, end);
},
isSelectAll() {
// 判断是否已选择所有行
return this.selectedRows.length === this.slicedItems.length;
}
}
});
```
2. 渲染表格
在Vue实例中,我们可以使用v-for语法渲染表格数据,并绑定勾选事件。
```html
<table>
<thead>
<tr>
<th>
<input type="checkbox" v-model="isSelectAll" @change="isSelectAll ? onSelectAll() : onClearSelection()">
</th>
<th>Name</th>
<th>Age</th>
<th>Gender</th>
</tr>
</thead>
<tbody>
<tr v-for="row in slicedItems" :key="row.id" @click="toggleSelection(row)" :class="{selected: isSelected(row)}">
<td>
<input type="checkbox" :checked="isSelected(row)" @click.stop>
</td>
<td>{{ row.name }}</td>
<td>{{ row.age }}</td>
<td>{{ row.gender }}</td>
</tr>
</tbody>
</table>
```
在表头添加一个全选复选框,并绑定一个computed属性isSelectAll来判断是否已选择所有行,同时定义两个方法onSelectAll和onClearSelection来实现全选和取消选择。在表格中每一行的前列添加一个复选框,通过@click事件绑定toggleSelection方法实现勾选/取消勾选。isSelected方法用于判断当前行是否已被勾选,根据返回值判断是否添加selected类名以实现勾选时的高亮效果。
3. 分页
最后,我们需要实现分页功能。可以使用第三方库如Vue-Pagination实现,也可以自己实现。这里我们在Vue实例中定义currentPage和pageSize来保存当前页码和每页条数,total记录数据总条数。使用computed属性pages计算总页数。在表格底部添加分页组件,并调用onPageChange方法处理页码变化事件。
```html
<template>
<div>
<table>
<!-- table code here -->
</table>
<pagination :current-page="currentPage" :total="total" :page-size="pageSize" @page-change="onPageChange"/>
</div>
</template>
<script>
export default {
data() {
return {
selectedRows: [], // 存储选择的行数
items: [], // 表格数据
currentPage: 1, // 当前页码
pageSize: 10, // 每页条数
total: 100 // 数据总条数
};
},
methods: {
// table methods here
},
computed: {
pages() {
// 计算总页数
return Math.ceil(this.total / this.pageSize);
},
slicedItems() {
// 根据分页条件筛选数据
const start = (this.currentPage - 1) * this.pageSize;
const end = start + this.pageSize;
return this.items.slice(start, end);
},
isSelectAll() {
// 判断是否已选择所有行
return this.selectedRows.length === this.slicedItems.length;
}
},
components: {
pagination
}
};
</script>
```
至此,我们已经完成了一个基本的跨页勾选的表格实现,您还可以根据需求自定义样式和功能。
阅读全文