vue渲染第一行为三个场地,每一列为场地名称+48时段 并点击某列 某列变色,当不能点击别的列的数据
时间: 2023-05-26 10:01:05 浏览: 89
A:实现这个需求可以采用 Vue 的数据绑定和事件绑定机制。首先,在 Vue 模板中通过循环遍历渲染出表格的每一行、每一列,并通过 v-bind 绑定样式来实现不同的颜色。
其次,在每个表格单元格中增加一个点击事件绑定,当用户点击某个单元格时,通过 Vue 的数据绑定机制将点击的列的状态保存下来,并通过 v-bind 绑定样式来实现该列的变色效果。
为了实现只能点击一列的效果,可以使用一个名称为 `activeColumn` 的数据变量来保存当前选中的列的索引值。当用户点击某个单元格时,判断当前单元格所在的列是不是已经被选中,如果已经被选中,则不做处理;如果还没有被选中,则更新 `activeColumn` 变量并更新该列的样式。
以下是示例代码:
```html
<template>
<div>
<table>
<thead>
<tr>
<th></th>
<th v-for="(item, index) in timeItems" :key="index">{{ item }}</th>
</tr>
</thead>
<tbody>
<tr v-for="(row, rowIndex) in spaceItems" :key="rowIndex">
<td>{{ row.title }}</td>
<td v-for="(cell, cellIndex) in row.cells" :key="cellIndex"
@click="handleCellClick(cellIndex)"
:class="{'active': activeColumn === cellIndex}">
</td>
</tr>
</tbody>
</table>
</div>
</template>
<script>
export default {
data() {
return {
timeItems: ['00:00', '01:00', '02:00', ..., '23:00'],
spaceItems: [
{ title: '场地 1', cells: [null, null, ..., null] },
{ title: '场地 2', cells: [null, null, ..., null] },
{ title: '场地 3', cells: [null, null, ..., null] }
],
activeColumn: -1
}
},
methods: {
handleCellClick(cellIndex) {
if (this.activeColumn === cellIndex) {
// 已经选中,不做处理
} else {
// 更新选中状态
this.activeColumn = cellIndex;
}
}
}
}
</script>
<style>
.active {
background-color: red;
}
</style>
```
阅读全文