请问el-table,我想点击不同的表头可以让表头改变颜色,并且可以获取这列数据,并且前6个表头还不能点击,这个请问谁知道怎么做么
时间: 2023-08-07 10:04:35 浏览: 212
可以通过以下步骤实现:
1. 在 `el-table` 中设置 `header-clickable` 属性为 `true`,以启用表头点击事件。
2. 在 `el-table-column` 中为每列添加一个自定义的 `header` 插槽,用于渲染自定义表头。
3. 在 `header` 插槽中,根据表头的 `prop` 属性判断该表头是否可以点击,如果可以点击,则绑定 `click` 事件并在事件处理程序中触发自定义事件,并将当前列的 `prop` 属性作为参数传递。
4. 在 `el-table` 中监听自定义事件,在事件处理程序中根据参数获取当前列的数据,并将其保存到一个变量中。
5. 在 `el-table-column` 的 `cell` 插槽中,使用 `scope.row` 获取当前行的数据,并根据当前列的 `prop` 属性获取该行对应的数据项,以渲染表格单元格。
下面是一个示例代码:
```html
<el-table :data="tableData" :header-clickable="true" @header-click="handleHeaderClick">
<el-table-column label="姓名" prop="name" header-clickable="false">
<template #header="{ column }">
<div :class="{ 'clickable': column.prop !== 'name' }" @click="handleColumnClick(column.prop)">
{{ column.label }}
</div>
</template>
<template #default="{ row }">
{{ row.name }}
</template>
</el-table-column>
<el-table-column label="年龄" prop="age" header-clickable="false">
<template #header="{ column }">
<div :class="{ 'clickable': column.prop !== 'age' }" @click="handleColumnClick(column.prop)">
{{ column.label }}
</div>
</template>
<template #default="{ row }">
{{ row.age }}
</template>
</el-table-column>
<!-- 其他列 -->
</el-table>
```
```js
export default {
data() {
return {
tableData: [
{ name: '张三', age: 20, /* 其他数据项 */ },
{ name: '李四', age: 25, /* 其他数据项 */ },
{ name: '王五', age: 30, /* 其他数据项 */ },
// ...
],
selectedColumn: null, // 当前选中的列
};
},
methods: {
handleColumnClick(prop) {
if (prop === 'name' || prop === 'age') {
return; // 前6个表头不能点击
}
this.selectedColumn = prop; // 保存选中的列
this.$emit('column-clicked', prop); // 触发自定义事件,传递当前列的 prop 属性
},
handleHeaderClick(column) {
if (!column.headerClickable) {
return; // 如果该列表头不能点击,则不做任何操作
}
// 改变表头颜色
const th = this.$el.querySelector(`th.${column.id}`);
th.style.backgroundColor = 'red';
},
},
};
```
在该示例中,我们为前两列的表头设置了自定义的 `header` 插槽,并在插槽中绑定了 `click` 事件。在事件处理程序中,我们判断当前列是否可以点击,并根据点击的列的 `prop` 属性保存选中的列,并触发了一个自定义事件 `column-clicked`,用于将选中的列传递给父组件。
在 `el-table` 中,我们监听了 `header-click` 事件,并在事件处理程序中改变了选中表头的颜色。
在父组件中,我们可以监听 `column-clicked` 事件,并在事件处理程序中获取选中的列的数据,以实现对该列数据的操作。
阅读全文