elementUi - - - - table 勾选功能 & 禁止勾选

博客围绕ElementUI展开,介绍了表格的勾选功能和禁止勾选功能,并分别给出了实现这两个功能的代码。

elementUi - - - - table 勾选功能 & 禁止勾选

1. table 勾选功能

代码如下:

<el-table :data="tableData" ref="multipleTable" @selection-change="handleSelectionChange"  >
          <el-table-column type="selection" width="55"></el-table-column>
</el-table>

...
    // 勾选
    handleSelectionChange(val) {
      // 这里是勾选回调
      this.multipleSelection = val;
    },

上述代码即可实现勾选功能

2. table 禁止勾选

代码如下:

<el-table :data="tableData" ref="multipleTable" @selection-change="handleSelectionChange" :selectable="checkboxT" disabled="true" >
          <el-table-column type="selection" width="55"></el-table-column>
</el-table>

...
    // 勾选
    handleSelectionChange(val) {
      // 这里是勾选回调
      this.multipleSelection = val;
   },
   // 禁止勾选
   checkboxT(row, index) {
      return row.can_edit;
    },
### 实现多级表头的功能 为了在 `ElementUI` 的 `el-table` 组件中实现多级表头的功能,可以采用自定义渲染的方式处理每一层表头中的复框逻辑。由于默认情况下 `el-table` 不支持直接设置多级表头的勾选项,因此需要通过组合多个 `&lt;el-table-column&gt;` 来模拟这一效果。 对于每个多级子项而言,在其对应的 `&lt;el-table-column&gt;` 中加入 `type=&quot;selection&quot;` 属性来创建择器,并确保这些列具有唯一的 `prop` 或者其他标识符以便区分不同级别的择状态[^1]。 下面是一个简单的例子展示如何构建一个多级表头并为其添加全/取消全功能: ```html &lt;template&gt; &lt;div class=&quot;app-container&quot;&gt; &lt;!-- 表格 --&gt; &lt;el-table ref=&quot;multipleTable&quot; :data=&quot;tableData&quot; style=&quot;width: 100%&quot; @selection-change=&quot;handleSelectionChange&quot;&gt; &lt;!-- 多级表头部分 --&gt; &lt;el-table-column align=&quot;center&quot; fixed&gt; &lt;template slot=&quot;header&quot;&gt; &lt;el-checkbox v-model=&quot;selectAllLevelOne&quot;&gt;&lt;/el-checkbox&gt; &lt;/template&gt; &lt;el-table-column type=&quot;selection&quot; width=&quot;55&quot;/&gt; &lt;/el-table-column&gt; &lt;el-table-column label=&quot;一级分类A&quot; align=&quot;center&quot;&gt; &lt;template slot=&quot;header&quot; slot-scope=&quot;{ column }&quot;&gt; &lt;span&gt;{{ column.label }}&lt;/span&gt; &lt;el-checkbox v-if=&quot;!selectAllLevelTwo[column.id]&quot; @change=&quot;(val) =&gt; handleSelectAll(val, column.id)&quot;&gt; {{ selectAllLevelTwo[column.id] ? &#39;已&#39; : &#39;未&#39;}} &lt;/el-checkbox&gt; &lt;/template&gt; &lt;el-table-column prop=&quot;aSubItem1&quot; label=&quot;二级-A-1&quot; /&gt; &lt;el-table-column prop=&quot;aSubItem2&quot; label=&quot;二级-A-2&quot; &gt; &lt;template slot=&quot;header&quot; slot-scope=&quot;{ column }&quot;&gt; &lt;span&gt;{{ column.label }}&lt;/span&gt; &lt;el-checkbox v-model=&quot;selectMap[&#39;aSubItem2&#39;]&quot;&gt;全部&lt;/el-checkbox&gt; &lt;/template&gt; &lt;el-table-column prop=&quot;subOfASubItem2_1&quot; label=&quot;三级-A-2-1&quot; /&gt; &lt;el-table-column prop=&quot;subOfASubItem2_2&quot; label=&quot;三级-A-2-2&quot; /&gt; &lt;/el-table-column&gt; &lt;/el-table-column&gt; &lt;!-- 更多的一级栏目... --&gt; &lt;/el-table&gt; &lt;/div&gt; &lt;/template&gt; &lt;script&gt; export default { data() { return { tableData: [], // 数据列表 selectAllLevelOne: false, selectAllLevelTwo: {}, selectMap: {} }; }, methods: { toggleSelection(rows) { if (rows) { rows.forEach(row =&gt; this.$refs.multipleTable.toggleRowSelection(row)); } }, handleSelectionChange(selection) { console.log(&#39;当前择:&#39;, selection); let levelOneSelectedCount = 0; let totalRows = this.tableData.length; Object.keys(this.selectAllLevelTwo).forEach(key =&gt; { const subItemsChecked = !this.selectMap[key].some(item =&gt; !item.checked); this.$set(this.selectAllLevelTwo, key, subItemsChecked); if(subItemsChecked){ ++levelOneSelectedCount; } }); this.selectAllLevelOne = levelOneSelectedCount === Object.keys(this.selectAllLevelTwo).length &amp;&amp; levelOneSelectedCount !== 0; }, handleSelectAll(checked, id) { this.$nextTick(() =&gt; { this.$set(this.selectMap[id], checked); this.handleSelectionChange(); }); } } }; &lt;/script&gt; ``` 此代码片段展示了如何利用 Vue.js 和 Element UI 创建带有可多级表头的表格结构。注意这里简化了一些细节以保持清晰度;实际应用时可能还需要考虑更多边界情况以及性能优化等问题。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值