el-table expand-change 只展开一行,其他行关闭

本文探讨了在Vue.js中优化表格展开功能的实现,详细解释了`row-key`、`expand-row-keys`属性和`@expand-change`事件的用法。通过设置`row-key`以优化渲染,利用`expand-row-keys`控制展开行,并在`@expand-change`事件中处理展开和关闭行为,提升用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


<el-table 
  ref="form" 
  :row-key="id"    
  :expand-row-keys="expands"
  @expand-change="expandSelect">
</el-table>

methods: {
 expandSelect(row, expandedRows) {
      this.expands = []
      if (expandedRows.length > 0) {
        row ? this.expands.push(row.id) : ''
      }
    } 
  }

三个条件

  • :row-key="id" ,行数据的 Key,用来优化 Table 的渲染;在使用 reserve-selection 功能与显示树形数据时,该属性是必填的。
  • :expand-row-keys=“expands”  ,可以通过该属性设置 Table 目前的展开行,需要设置 row-key 属性才能使用,该属性为展开行的 keys 数组。
  • @expand-change=“expandSelect”,当用户对某一行展开或者关闭的时候会触发该事件(展开行时,回调的第二个参数为 expandedRows;树形表格时第二参数为
    expanded)

### Vue 中 `el-table` 组件 `expand-change` 事件的使用 在 Vue 应用程序中,Element UI 提供了丰富的组件来简化前端开发工作。对于表格组件 (`el-table`) 而言,其支持多种交互方式之一就是通过展开(`expand`)功能实现更复杂的数据展示逻辑。 当涉及到异步加载子项数据时,可以利用 `expand-change` 事件监听用户的操作为,在每次用户点击展开/收起某一行的时候触发相应的处理函数[^1]。 #### 处理流程说明 每当发生扩展变化时,会传递两个参数给回调函数:一个是当前被改变状态的那一行记录对象;另一个则是整个已展开组成的数组列表。基于此机制,可以在接收到这些信息之后发起网络请求获取额外的信息并更新到界面上显示出来。 #### 实现代码示例 下面是一个简单的例子展示了如何结合 `axios` 来完成这一过程: ```javascript <template> <div id="app"> <!-- 定义 table 并绑定 expand-change --> <el-table :data="tableData" @expand-change="handleExpandChange"> <el-table-column type="expand"> <template slot-scope="props"> <p v-for="(item, index) in props.row.children">{{ item.name }}</p> </template> </el-table-column> <el-table-column label="日期" prop="date"></el-table-column> <el-table-column label="姓名" prop="name"></el-table-column> </el-table> </div> </template> <script> import axios from 'axios'; export default { data() { return { tableData: [ // 初始数据集... ] }; }, methods: { handleExpandChange(row, expandedRows) { const loadingIndex = this.tableData.indexOf(row); if (!row._loading && !row.children) { row._loading = true; setTimeout(() => { // 模拟异步请求延迟 axios.get('/api/getChildren', { params: { parentId: row.id } }) .then(response => { this.$set(this.tableData[loadingIndex], 'children', response.data); row._loading = false; }); }, 500); // 延迟时间设置为半秒 } } } }; </script> ``` 在这个案例里,首先定义了一个基础表格结构,并绑定了 `@expand-change` 方法用于响应用户的动作。接着,在 JavaScript 部分实现了具体的业务逻辑——即根据传入的 `row` 参数判断是否已经存在对应的子级数据,如果没有则执一次模拟的 API 请求去拉取新资料填充至视图当中。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值