您好,登錄后才能下訂單哦!
這篇文章主要介紹“vue+elementUI怎么配置表格的列顯示與隱藏”,在日常操作中,相信很多人在vue+elementUI怎么配置表格的列顯示與隱藏問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”vue+elementUI怎么配置表格的列顯示與隱藏”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
表格的列過(guò)多時(shí),可以根據(jù)需要控制列的顯示與隱藏,目前是采用Vue+elementUI(適配Vue3的Element Plus)實(shí)現(xiàn)的,具體效果與代碼如下:
效果圖:
完整代碼:
<template> <div id="app"> <el-table :data="tableData" border ref="table"> <el-table-column fixed type="index" align="center" :index="1"> <template #header> <el-popover placement="bottom" :width="600" :visible="visible" > <!-- 配置列面板 --> <transition name="fade"> <div> <div>選擇顯示字段</div> <div> <el-checkbox v-model="showColumn.date" disabled>日期</el-checkbox> <el-checkbox v-model="showColumn.name">姓名</el-checkbox> <el-checkbox v-model="showColumn.provinces">省份</el-checkbox> <el-checkbox v-model="showColumn.city">市區(qū)</el-checkbox> <el-checkbox v-model="showColumn.adreess">地址</el-checkbox> <el-checkbox v-model="showColumn.zipCode">郵編</el-checkbox> </div> </div> </transition> <div > <el-button size="mini" type="text" @click="visible = false">取消</el-button> <el-button size="mini" type="primary" plain @click="saveColumn">確定</el-button> </div> <template #reference> <i class="el-icon-setting" @click="visible = true" ></i> </template> </el-popover> </template> </el-table-column> <el-table-column prop="date" label="日期" width="150" v-if="showColumn.date" > </el-table-column> <el-table-column prop="name" label="姓名" width="120" v-if="showColumn.name" > </el-table-column> <el-table-column prop="province" label="省份" width="120" v-if="showColumn.provinces" > </el-table-column> <el-table-column prop="city" label="市區(qū)" width="120" v-if="showColumn.city" > </el-table-column> <el-table-column prop="address" label="地址" minWidth="300" v-if="showColumn.adreess" > </el-table-column> <el-table-column prop="zip" label="郵編" width="120" v-if="showColumn.zipCode" > </el-table-column> <el-table-column label="操作" fixed="right" width="100" align="center"> <template #default="scope"> <el-button @click="handleClick(scope.row)" type="text" size="small" >查看</el-button > <el-button type="text" size="small">編輯</el-button> </template> </el-table-column> </el-table> </div> </template> <script> export default { data() { return { visible: false, tableData: [ { date: "2016-05-02", name: "王小虎", province: "上海", city: "普陀區(qū)", address: "上海市普陀區(qū)金沙江路 1518 弄", zip: 200333, }, { date: "2016-05-04", name: "王小虎", province: "上海", city: "普陀區(qū)", address: "上海市普陀區(qū)金沙江路 1517 弄", zip: 200333, }, { date: "2016-05-01", name: "王小虎", province: "上海", city: "普陀區(qū)", address: "上海市普陀區(qū)金沙江路 1519 弄", zip: 200333, }, { date: "2016-05-03", name: "王小虎", province: "上海", city: "普陀區(qū)", address: "上海市普陀區(qū)金沙江路 1516 弄", zip: 200333, }, ], // 列的配置化對(duì)象,存儲(chǔ)配置信息 showColumn: { date: true, name: true, provinces: true, city: true, adreess: true, zipCode: true, }, }; }, mounted() { // 發(fā)請(qǐng)求得到showColumnInitData的列的名字 if(localStorage.getItem("columnSet")){ this.showColumn = JSON.parse(localStorage.getItem("columnSet")) }else{ this.showColumn = { date: true, name: true, provinces: true, city: true, adreess: true, zipCode: true, }; } }, methods: { handleClick(row) { console.log(row); }, saveColumn() { localStorage.setItem("columnSet",JSON.stringify(this.showColumn)) this.visible = false; }, }, }; </script> <style lang="postcss" scoped> /* 控制淡入淡出效果 */ .fade-enter-active, .fade-leave-active { transition: opacity 0.3s; } .fade-enter, .fade-leave-to { opacity: 0; } </style>
問(wèn)題:
1、可以簡(jiǎn)單實(shí)現(xiàn),但最好的方法是列的全部字段也通過(guò)配置實(shí)現(xiàn);
2、elementUI的popover嵌套在table里使用時(shí),會(huì)出現(xiàn)面板的顯示bug,例如本文是采用:visible=“visible”,如果按照正常雙向綁定v-model:visible=“visible”,則會(huì)出現(xiàn)彈窗閃現(xiàn)的現(xiàn)象,彈出后會(huì)立馬關(guān)閉;
現(xiàn)象:
原因猜想:
v-model:visible=“visible”,會(huì)自動(dòng)觸發(fā)遮罩層關(guān)閉,置visible變?yōu)閒alse(watch監(jiān)聽visible,點(diǎn)擊彈出按鈕時(shí),visible變?yōu)閠rue后會(huì)立馬變?yōu)閒alse);
3、如果某一列設(shè)置minWidth屬性,如果隱藏該列,則popover會(huì)出現(xiàn)彈出兩個(gè)窗口的異?,F(xiàn)象,例如“地址”列:
故可采用dialog來(lái)實(shí)現(xiàn):
<template> <div id="app"> <el-table :data="tableData" border ref="table"> <el-table-column fixed type="index" align="center" :index="1"> <template #header> <i class="el-icon-setting" @click="visible = true" ></i> </template> </el-table-column> <el-table-column prop="date" label="日期" width="150" v-if="showColumn.date" > </el-table-column> <el-table-column prop="name" label="姓名" width="120" v-if="showColumn.name" > </el-table-column> <el-table-column prop="province" label="省份" width="120" v-if="showColumn.provinces" > </el-table-column> <el-table-column prop="city" label="市區(qū)" width="120" v-if="showColumn.city" > </el-table-column> <el-table-column prop="address" label="地址" minWidth="300" v-if="showColumn.adreess" > </el-table-column> <el-table-column prop="zip" label="郵編" width="120" v-if="showColumn.zipCode" > </el-table-column> <el-table-column label="操作" fixed="right" width="100" align="center"> <template #default="scope"> <el-button @click="handleClick(scope.row)" type="text" size="small" >查看</el-button > <el-button type="text" size="small">編輯</el-button> </template> </el-table-column> </el-table> <el-dialog title="字段配置" v-model="visible"> <transition name="fade"> <div> <div>選擇顯示字段</div> <div> <el-checkbox v-model="showColumn.date" disabled>日期</el-checkbox> <el-checkbox v-model="showColumn.name">姓名</el-checkbox> <el-checkbox v-model="showColumn.provinces">省份</el-checkbox> <el-checkbox v-model="showColumn.city">市區(qū)</el-checkbox> <el-checkbox v-model="showColumn.adreess">地址</el-checkbox> <el-checkbox v-model="showColumn.zipCode">郵編</el-checkbox> </div> </div> </transition> <template #footer> <span class="dialog-footer"> <el-button @click="visible = false">取 消</el-button> <el-button type="primary" @click="saveColumn">確 定</el-button> </span> </template> </el-dialog> </div> </template>
效果:
到此,關(guān)于“vue+elementUI怎么配置表格的列顯示與隱藏”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。