Vue2 Element el-table多選表格控制選取的思路解讀
前言
構(gòu)建多選表格, 實(shí)現(xiàn)對(duì)監(jiān)聽(tīng)選取狀況, 獲取當(dāng)前選中項(xiàng)行數(shù)據(jù), 獲取當(dāng)前所有選中項(xiàng).
一、構(gòu)建多選表格
構(gòu)建DOM結(jié)構(gòu), 在表格el-table內(nèi)加一個(gè)特殊列即可, 將列類(lèi)型type屬性設(shè)置為selection.
<el-table-column type="selection"> </el-table-column>
注意如果使用v-for指令生成表格, 不要將上面這段代碼直接加在v-for里, 不然每行旁邊都有一個(gè)選項(xiàng)列, 肯定是要分開(kāi)的, 但是怎么分開(kāi)的同時(shí)不拆表呢.
剛開(kāi)始我嘗試過(guò)這種方案, 使用一個(gè)div將需要遍歷生成的列包裹, 在div上v-for遍歷, 但el-table仍然是基于HTML表格的封裝, 這就像往原生HTML表格的列外面套了div, 會(huì)直接破壞表格結(jié)構(gòu).
我差點(diǎn)就忘了這是Vue2…直接把div換成<template></template>就好.
<el-table-column type="selection" width="55">
</el-table-column>
<template v-for="(item, index) in billTableEvent">
<el-table-column
:prop="item.props"
:label="item.label"
:align="item.align"
:min-width="item.minwidth"
v-if="item.props === 'payAmt'"
:key="index"
>
<template slot-scope="scope">
{{ scope.row.payAmt }}
</template>
</el-table-column>
<el-table-column
:prop="item.props"
:label="item.label"
:align="item.align"
:min-width="item.minWidth"
:key="index"
v-else
>
</el-table-column>
</template>二、多選表的事件、方法
剛開(kāi)始的時(shí)候, 我覺(jué)得要是將el-table提供的方法作為事件處理函數(shù), 那我豈不是可以同時(shí)操作一堆表格參數(shù), 會(huì)更簡(jiǎn)單些?
然后根本拿不到值…
如果將el-table的方法直接作為事件處理函數(shù), 那么該事件處理函數(shù)會(huì)被直接判定為一個(gè)普通的事件處理函數(shù), 并不能發(fā)揮到其應(yīng)有的作用, 應(yīng)當(dāng)通過(guò)事件拿到el-table相關(guān)參數(shù), 然后在合適的地方調(diào)用el-table提供的方法來(lái)協(xié)助達(dá)成目的.
獲取參數(shù)例:


methods: {
handleSelectChange(selection) {
this.multipleSelection = selection;
console.log(selection); // [{...}, {...}]
},
handleSelectAll(selection) {
console.log(this.multipleSelection);
console.log(selection); // [{...}, {...}]
},
},el-table的事件處理函數(shù)內(nèi)除了可以使用事件本身攜帶的參數(shù), 還可以使用el-table的方法, 事實(shí)上這些el-table提供的方法可以在各種能調(diào)用函數(shù)的地方被調(diào)用, 并且它們各自接收固定的值作為參數(shù),
舉例官方的例子, 在表格外調(diào)用toggleSelection:

但由于使用這些方法需要接收固定的參數(shù), 在el-table的事件處理函數(shù)里調(diào)用它們可能會(huì)更方便一些.
<div id="empty">
<el-table
ref="tableEBBA020M"
:data="billData"
@row-click="rowClick"
@selection-change="handleSelectChange"
>
<el-table-column
v-for="(item, index) in billTableEvent"
:prop="item.props"
:label="item.label"
:align="item.align"
:min-width="item.minwidth"
v-if="item.props === 'payAmt'"
:key="index"
>
<template slot-scope="scope">
{{ scope.row.payAmt }}
</template>
</el-table-column>
</el-table>
</div>然后自己起一個(gè)事件處理函數(shù)名(額…至少要和事件相關(guān)), 在這個(gè)事件處理函數(shù)里面調(diào)用el-table的方法.
methods: {
rowClick(row) { // 單選
this.$refs.tableEBBA020M.toggleRowSelection(row);
},
}不需要去考慮太復(fù)雜的事情, 比如設(shè)立一個(gè)變量每次選中就+1偶數(shù)時(shí)選中奇數(shù)取消什么的(已經(jīng)開(kāi)始難受了), 這些細(xì)化的事情Element已經(jīng)幫忙做好了, 完成后會(huì)直接把結(jié)果給你, 也就是事件所攜帶的各種參數(shù).
利用上面的方法拿到el-table的selection和row, 配合一些數(shù)組方法就已經(jīng)可以完成大多數(shù)的多選表格控制.
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- vue2+element?ui?中的el-table?選中當(dāng)前行當(dāng)前行變色的實(shí)現(xiàn)代碼
- Vue2+Element-ui實(shí)現(xiàn)el-table表格自適應(yīng)高度的案例
- vue2+elementui的el-table固定列會(huì)遮住橫向滾動(dòng)條及錯(cuò)位問(wèn)題解決方案
- VUE2.0+ElementUI2.0表格el-table循環(huán)動(dòng)態(tài)列渲染的寫(xiě)法詳解
- VUE2.0 ElementUI2.0表格el-table自適應(yīng)高度的實(shí)現(xiàn)方法
- vue2.0 + element UI 中 el-table 數(shù)據(jù)導(dǎo)出Excel的方法
- vue2使用el-tag實(shí)現(xiàn)自定義菜單導(dǎo)航標(biāo)簽
- vue2實(shí)現(xiàn)在el-table里插入el-tag的示例代碼
相關(guān)文章
Vue infinite update loop的問(wèn)題解決
這篇文章主要介紹了Vue "...infinite update loop..."的問(wèn)題解決,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-04-04
vue-pdf實(shí)現(xiàn)文件在線預(yù)覽
這篇文章主要為大家詳細(xì)介紹了vue-pdf實(shí)現(xiàn)文件在線預(yù)覽,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
vue設(shè)置路由title,但刷新頁(yè)面時(shí)title失效的解決
這篇文章主要介紹了vue設(shè)置路由title,但刷新頁(yè)面時(shí)title失效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
vue-cli-service serve報(bào)錯(cuò)error:0308010C:digital enve
這篇文章主要介紹了vue-cli-service serve報(bào)錯(cuò)error:0308010C:digital envelope routines::unsupported的解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
使用Vue+ElementUI動(dòng)態(tài)生成面包屑導(dǎo)航教程
Vue和ElementUI都是非常流行的前端開(kāi)發(fā)框架,它們可以讓我們更加便捷地開(kāi)發(fā)前端應(yīng)用,下面這篇文章主要給大家介紹了關(guān)于使用Vue+ElementUI動(dòng)態(tài)生成面包屑導(dǎo)航的相關(guān)資料,需要的朋友可以參考下2023-05-05
vue登錄頁(yè)實(shí)現(xiàn)使用cookie記住7天密碼功能的方法
這篇文章主要介紹了vue登錄頁(yè)實(shí)現(xiàn)使用cookie記住7天密碼功能的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
elementUI同一頁(yè)面展示多個(gè)Dialog的實(shí)現(xiàn)
這篇文章主要介紹了elementUI同一頁(yè)面展示多個(gè)Dialog的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
vue3中Fragment特性的一個(gè)bug需要注意事項(xiàng)
這篇文章主要介紹了vue3中Fragment特性的一個(gè)bug,需要留意的注意事項(xiàng)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01

