在使用ElementUI开发时,可能需要实现el-table的选中和el-tag同步。
类似如下效果:
希望表格选择改变,或者tag删除时,table和tag能同步选择情况。
查了一下官方文档,找到了一种解决方案如下。
首先el-table需要务必设置row-key,这个row-key作用:
row-key 行数据的 Key,用来优化 Table 的渲染;在使用 reserve-selection 功能与显示树形数据时,该属性是必填的。类型为 String 时,支持多层访问: user.info.id
,但不支持user.info[0].id
,此种情况请使用Function
。Function(row)/String 参考:https://element.eleme.cn/?#/zh-CN/component/table
这样当选表格中行复选框后,当重新搜索新数据时,选中过的数据依然会保留状态,再次搜索出现时会默认选中。(根据这个row-key来渲染的)
另外我们需要知道 table的选择改变,就可以将选择变化同步到tag的数据,这个事件选择selection-change即可。tag 的删除(close事件)也需要做一下数据同步处理(同步table的选中数据)。
上代码:
table和tag:
<template v-for="(userinfo,index) in selectUserinfos"> <el-popover placement="top-start" :title="userinfo.name" width="200" trigger="click" :content="userinfo.nickName" :key="index"> <el-tag closable effect="dark" style="margin:5px;" slot="reference" @close="deleteSelection(userinfo,index)"> {{userinfo.name}} </el-tag> </el-popover> </template> <el-table :data="userinfos" height="300" border @selection-change="select" ref="table" :row-key="getRowKey"> <el-table-column type="selection" :reserve-selection="true" width="55"> </el-table-column> <el-table-column property="name" label="用户"></el-table-column> <el-table-column property="nickName" label="昵称" ></el-table-column> </el-table>
js部分
<script> export default { data() { return { userinfos:[], selectUserinfos:[], getRowKey(row){ return row.id; } }; }, created:function(){ this.loaddatas(); }, methods: { select(selection){ //表格的选择数据变化时,同步到tag数据 this.selectUserinfos = selection; }, loaddatas(){ /* 加载http://www.wanmait.com数据,省略。。。 */ }, deleteSelection(userinfo,index){ //el-tag的close事件,同步删除表格的选中数据 this.selectUserinfos.splice(index,1); this.$refs.table.selection.splice(index,1); } } } </script>
0条评论
点击登录参与评论