element-ui中el-table expand 手风琴效果,展开里面的内容或者table,展开下一个,上一个自动收起

这篇博客介绍了如何在 Vue.js 框架下使用 Element UI 库实现表格行的展开与收起功能。通过绑定 `ref` 和调用 `toggleRowExpansion` 方法,实现了点击按钮切换表格行的展开状态,同时提供了详细的代码示例,包括模板、样式和方法。示例中展示了包含子列表的表格行,并在操作列中添加了展开和收起按钮。
摘要由CSDN通过智能技术生成

在这里插入图片描述

调用Table Methods里的方法

this.$refs.table.toggleRowExpansion(row)   

源码

<template>
	<div style="margin: 20px;" class="Box">
		<el-table ref="table"  stripe fit highlight-current-row :data="tableData" style="width:800px">
			<el-table-column label="ID" prop="id" align="center">
			</el-table-column>
			<el-table-column label="事件" prop="title" align="center">
			</el-table-column>
			<el-table-column label="思考" prop="thinking" align="center">
			</el-table-column>
			<el-table-column label="操作" align="center">
				<template slot-scope="scope">
					<span v-if="scope.row.id==currentIndex">
                <el-button
                type="text"
                @click="toogleExpand(scope.row, '收起')"
              >收起</el-button>
					</span>
					<span v-else>
					  <el-button
                type="text"
                @click="toogleExpand(scope.row, '展开')"
              >展开</el-button>
					</span>
				</template>
			</el-table-column>
			<el-table-column type="expand" width="1">
				<template slot-scope="props">
					<el-table border :data="props.row.foodsList" style="width: 100%" max-height="250">
						<el-table-column prop="name" label="名称" align="center" />
						<el-table-column prop="price" label="价格" align="center"/>
						<el-table-column prop="number" label="数量" align="center" />
						<el-table-column prop="desc" label="味道" align="center" />
					</el-table>
				</template>
			</el-table-column>
		</el-table>
	</div>
</template>
<script>
	export default {
		data() {
			return {
				currentIndex: null,
				tableData: [{
						id: 1,
						title: '早饭',
						thinking: '思考思考思考',
						foodsList: [{
								name: '鸡蛋',
								price: 1.5,
								number: 1,
								desc: '尚可'
							},
							{
								name: '包子',
								price: 2.5,
								number: 1,
								desc: '尚可'
							}
						]
					},
					{
						id: 2,
						title: '午饭饭',
						thinking: '思考思考思考',
						foodsList: [{
							name: '面条',
							price: 15,
							number: 1,
							desc: '尚可'
						}]
					},
					{
						id: 3,
						title: '晚饭',
						thinking: '思考思考思考',
						foodsList: [{
							name: '水饺',
							price: 18,
							number: 1,
							desc: '尚可'
						}]
					}
				]
			};
		},
		methods: {
		 toogleExpand(row, text) {
				let $table = this.$refs.table;
        if (text == "展开") {
				this.tableData.map((item) => {
					if (row.id != item.id) {
						$table.toggleRowExpansion(item, false)
					}
				})
        this.currentIndex = row.id
          this.Text = "收起";
      } else {
         this.currentIndex = null;
        this.Text = "展开";
      }
				$table.toggleRowExpansion(row)
		
			}
		}
	}
</script>
<style scoped>
.Box  .el-table__expand-icon {
  display: none;
}
.Box  .el-table .row-expand-cover .cell .el-table__expand-icon {
  display: none;
}
</style>

已更新

Element UI,要展开`el-table`表格的行,你可以使用`expand-row-keys`属性来控制展开的行。首先,你需要在表格的数据添加一个属性用于标识是否展开该行,比如命名为`expanded`。然后,在`el-table`组件上添加`expand-row-keys`属性,并将其绑定到一个数组,用于存储展开的行的唯一标识。最后,在表格的列配置,使用`scoped-slot`来自定义展开内容。 下面是一个示例代码: ```html <template> <el-table :data="tableData" :expand-row-keys="expandedRows" @expand-change="handleExpandChange" > <!-- 自定义展开内容 --> <template v-slot="{ row }"> <el-form :inline="true"> <el-form-item label="姓名"> {{ row.name }} </el-form-item> <el-form-item label="年龄"> {{ row.age }} </el-form-item> <!-- 其他表单项 --> </el-form> </template> <!-- 表格列配置 --> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <!-- 其他列配置 --> </el-table> </template> <script> export default { data() { return { tableData: [ { name: '张三', age: 18, expanded: false }, { name: '李四', age: 20, expanded: false }, // 其他数据 ], expandedRows: [] // 存储展开的行的唯一标识 }; }, methods: { handleExpandChange(row, expanded) { // 当展开行变化时更新expandedRows数组 if (expanded) { this.expandedRows.push(row); // 将展开的行添加到数组 } else { const index = this.expandedRows.findIndex(item => item === row); if (index > -1) { this.expandedRows.splice(index, 1); // 从数组移除收起的行 } } } } }; </script> ``` 这是一个基本的示例,你可以根据你的实际需求自定义展开内容和其他列配置。请注意,你需要根据实际情况修改表格数据和列配置的属性名。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值