elementUI 表格展开行

这篇博客介绍了如何在Vue.js应用中实现表格的点击行展开功能,每次只展示一行详细信息。通过设置`expand-row-keys`、`row-key`属性以及监听`expand-change`和`row-click`事件,结合`toggleRowExpansion`方法实现。同时,文章提到了阻止事件传播的方法`@click.stop`,确保按钮点击不受行点击事件影响。
摘要由CSDN通过智能技术生成

这次要实现的是点击哪行展开哪行,其他行关闭(即 每次只展示一行)

效果图 ↓
效果图


<el-table
  :data="tableData"
  :expand-row-keys="expands"
  :row-key="getRowKeys"
  @expand-change="expandSelect"
  @row-click="clickRow"
  ref="expandTable"
  style="width: 100%">
  <el-table-column type="expand">
    <template slot-scope="props">
      <!-- 这放啥都行 不重要 -->
      <el-form>
        <el-form-item label="商品名称">
          <span>{{ props.row.name }}</span>
        </el-form-item>
      </el-form>
      <!-- 这放啥都行 不重要 -->
    </template>
  </el-table-column>
  <el-table-column label="商品 ID" align="center" prop="id"></el-table-column>
  <el-table-column label="商品名称" align="center" prop="name"></el-table-column>
  <el-table-column label="描述" align="center" prop="desc"></el-table-column>
  <el-table-column label="操作" align="center">
   <template slot-scope="scope">
     <el-button @click.stop="clickBtn">查看</el-button>
   </template>
  </el-table-column>
</el-table>
export default {
  data () {
    return {
      tableData: [{
        id: '12987122',
        name: '好滋好味鸡蛋仔',
        desc: '荷兰优质淡奶,奶香浓而不腻',
        shop: '王小虎夫妻店',
      }, {
        id: '12987123',
        name: '好滋好味鸡蛋仔',
        desc: '荷兰优质淡奶,奶香浓而不腻',
        shop: '王小虎夫妻店',
      }, {
        id: '12987125',
        name: '好滋好味鸡蛋仔',
        desc: '荷兰优质淡奶,奶香浓而不腻',
        shop: '王小虎夫妻店',
      }],
      // 要展开的行,数值的元素是row的key值
      expands: [],
      // 获取行数据的key
      getRowKeys (row) {
        return row.id
      },
    }
  },
  methods: {
    // 每次只展示一行
    expandSelect (row, expandedRows) {
      // 当没有展开行时
      if (expandedRows.length > 0) {
        // 先清空展开行数组
        this.expands = []
        // 把当前行的id放到展开行数组中(data中getRowKeys获取的是什么这里就push什么) 
        this.expands.push(row.id)
        } else {
          // 清空存放目前展开行的数组
          this.expands = []
      }
    },
    // 单击某行任意位置展开/收起行
    clickRow (row) {
      this.$refs.expandTable.toggleRowExpansion(row)
      // 如果仅为点击展开 传第二个参数为true
      // this.$refs.expandTable.toggleRowExpansion(row, true)
    },

	clickBtn () {
	  console.log('阻止单击事件继续传播')
	}
  }
}

:expand-row-keys="expands"

expand-row-keys可以通过该属性设置 Table 目前的展开行expands,需要设置 row-key 属性才能使用

row-key 行数据的 Key,用来优化 Table 的渲染

expand-change
当用户对某一行展开或者关闭的时候会触发该事件(展开行时,回调的第二个参数为 expandedRows;树形表格时第二参数为 expanded

row-click
当某一行被点击时会触发该事件

toggleRowExpansion
用于可展开表格与树形表格,切换某一行的展开状态,如果使用了第二个参数,则是设置这一行展开与否(expanded 为 true 则展开)


当表格中出现按钮的点击事件时
@click.stop="clickBtn"
可以阻止单击事件继续传播(避免点击行时影响按钮点击事件)


仅作为记录

不喜勿喷!!!
不喜勿喷!!!
不喜勿喷!!!

对于 ElementUI 的树形表格中的子节点展开表单,你可以在表格的 `row-template` 中使用 `v-if` 来判断当前是否为父节点,如果是,则渲染表单的内容。当用户点击父节点的展开按钮时,可以通过 `row-expand` 事件来获取当前父节点的信息,然后使用 `toggleRowExpansion` 方法将子节点展开,并在展开的子节点中渲染表单。 以下是一个简单的示例代码: ``` <template> <el-table :data="tableData" :row-key="row => row.id" :expand-row-keys="expandedKeys" @row-expand="handleRowExpand"> <el-table-column type="expand"></el-table-column> <el-table-column prop="name" label="名称"></el-table-column> <el-table-column prop="address" label="地址"></el-table-column> <el-table-column label="操作"> <template v-slot="scope"> <el-button v-if="scope.row.isParent" @click="toggleExpansion(scope.row)">展开</el-button> </template> </el-table-column> <el-table-column label="表单" :row-template="scope => rowTemplate(scope.row)"></el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ { id: 1, name: '父节点1', isParent: true, address: '地址1', form: { username: '', age: '' } }, { id: 2, name: '子节点1-1', parentId: 1, address: '地址2', form: {} }, { id: 3, name: '子节点1-2', parentId: 1, address: '地址3', form: {} }, { id: 4, name: '父节点2', isParent: true, address: '地址4', form: { email: '', phone: '' } }, { id: 5, name: '子节点2-1', parentId: 4, address: '地址5', form: {} }, { id: 6, name: '子节点2-2', parentId: 4, address: '地址6', form: {} }, ], expandedKeys: [], }; }, methods: { rowTemplate(row) { if (row.isParent) { return ( <el-form> <el-form-item label="用户名"> <el-input v-model={row.form.username}></el-input> </el-form-item> <el-form-item label="年龄"> <el-input v-model={row.form.age}></el-input> </el-form-item> </el-form> ); } return null; }, toggleExpansion(row) { this.$refs.table.toggleRowExpansion(row); }, handleRowExpand(row) { if (row.isParent) { this.expandedKeys.push(row.id); } }, }, }; </script> ``` 在这个示例中,我们使用 `row-template` 来渲染表格的每一,如果当前是父节点,则渲染一个包含用户名和年龄输入框的表单。点击父节点的展开按钮时,我们使用 `toggleRowExpansion` 方法将子节点展开,并将展开的父节点的 `id` 添加到 `expandedKeys` 数组中。当子节点展开时,会自动渲染子节点的内容,这里我们并没有在子节点中渲染表单。你可以根据需要自调整代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值