element table 判断当前行是否展开和只展开一行

element组件提供了table的展开和收起功能,并提供了expand-change事件用来监听table行的展开和收起

在一些特殊情况下如:处理异步数据时,希望展开行时请求接口,关闭行时不用请求,但是expand-change监听事件,无论是展开还是收起都会触发,于是就希望能有一个类似isExpended布尔类型的状态属性来判断是否调用接口。

借助expand-change的参数实现 判断展开还是关闭

expand-change会获取两个参数,第一个参数是当前行的数据,第二个参数是当前展开行的数组

:展开时数组会加一,收起时数组会减一。

<template>
	<el-table  @expand-change="handleExpandChange"></el-table>
</template>

<script setup lang="ts">
    const expandchange = async (row: any, rows: any) => {
        const isExpend = rows.some((r:any) => r.id === row.id) // 判断当前行展开状态
        if (isExpend) {
            console.log('当前行已展开')
            //调取接口

        } else {
            console.log('当前行已关闭')
            return
        }

    }
</script>
 实现只展开一行

如果设置table展开列只能有限展开一行时可以根据第二个参数的length来进行判断,如果允许同时展开多行时,这需要判断第二个参数数组中是否包含第一个参数的值,如果包含则是展开,如果不包含则是收起。

 :row-key='getRowKeys'              作为每一项的key,确保唯一性

:expand-row-keys="expands"     用来存储唯一的值

   <el-table :data="tableData" border style="width: 100%" @expand-change="expandchange" :row-key="getRowKeys"  :expand-row-keys="expends"></el-table>

<script setup lang="ts">

const getRowKeys = (row) => {
    return row.id
}
const expends = ref([])
const expandchange = async (row: any, rows: any) => {

     if (rows.length) {//说明展开了
        expends.value = []
        if (row) {
            expends.value.push(row.id)//只展开当前行id
        }
    } else {
        expends.value = []
        return
    }

}

</script>

Element Plus table hover 方法可以通过设置 CSS 样式来实现。具体步骤如下: 1. 添加 hover 样式 在 CSS 样式表中添加以下样式: ``` .el-table__row:hover { background-color: #f5f7fa; cursor: pointer; } ``` 这样当鼠标悬停在表格上时,会将该背景颜色改变为灰色,并将鼠标指针改变为手型。 2. 设置 table-row-class-name 属性 在使用 Element Plus table 组件时,可以通过设置 table-row-class-name 属性来指定表格的类名。可以将该属性设置为一个函数,该函数返回一个字符串,该字符串为表格的类名。 在该函数中判断当前是否被选中或悬停,如果是,则返回对应的类名。示例代码如下: ``` <el-table :data="tableData" :row-class-name="tableRowClassName"> <!-- 表格列 --> </el-table> <script> export default { data() { return { // 表格数据 tableData: [], // 当前悬停的 hoverRow: null, // 当前选中的 selectedRow: null }; }, methods: { // 判断是否被选中或悬停 tableRowClassName({ row, rowIndex }) { if (row === this.selectedRow) { return 'selected-row'; } else if (row === this.hoverRow) { return 'hover-row'; } else { return ''; } } } }; </script> ``` 在上述代码中,tableRowClassName 函数根据当前是否被选中或悬停,返回对应的类名。在模板中,可以使用该函数来设置 table-row-class-name 属性。 3. 监听 mouseenter 和 mouseleave 事件 在组件中监听表格的 mouseenter 和 mouseleave 事件,以更新当前悬停的。示例代码如下: ``` <el-table :data="tableData" :row-class-name="tableRowClassName"> <!-- 表格列 --> </el-table> <script> export default { data() { return { // 表格数据 tableData: [], // 当前悬停的 hoverRow: null, // 当前选中的 selectedRow: null }; }, methods: { // 判断是否被选中或悬停 tableRowClassName({ row, rowIndex }) { if (row === this.selectedRow) { return 'selected-row'; } else if (row === this.hoverRow) { return 'hover-row'; } else { return ''; } }, // 监听 mouseenter 事件 handleMouseEnter(row) { this.hoverRow = row; }, // 监听 mouseleave 事件 handleMouseLeave(row) { this.hoverRow = null; } } }; </script> ``` 在上述代码中,handleMouseEnter 和 handleMouseLeave 方法分别监听 mouseenter 和 mouseleave 事件,以更新当前悬停的。模板中可以使用 v-on 指令来绑定这两个事件。 ``` <el-table :data="tableData" :row-class-name="tableRowClassName"> <!-- 表格列 --> <template v-slot:row="{row}"> <tr @mouseenter="handleMouseEnter(row)" @mouseleave="handleMouseLeave(row)"> <!-- 表格单元格 --> </tr> </template> </el-table> ``` 在上述代码中,通过 v-slot 来自定义表格,然后在 tr 元素上绑定 mouseenter 和 mouseleave 事件,以更新当前悬停的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值