<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在實際工作場景中,我們在展示資料時,會遇到展示資料過多此時會將資料分頁展示,但是如果資料列展示過多,會造成每列資料相對比較擁擠,並且所有的列資料不一定都是必須展示的。
可以將其先隱藏,使用者需要時才將其顯示在列表之中。所以本文章結合vue+elementUI--中的el-table以及分頁實現表格列的動態隱藏與顯示。
實現思路:將表格展示+分頁+顯示/隱藏列 元件化,其中利用slot動態展示不同的表格資料,父元件參照此元件傳遞相應切必須的引數,當分頁或顯示/隱藏列動態變化時將資料再返回父元件,父元件中的列根據回傳的資料利用v-if實現列的顯示與隱藏(此程式碼為第一版!)
子元件(trendsTable.vue)主要程式碼:
<!-- create by crystalSong 分頁+table+動態設定表格列的隱藏與顯示 --> <template> <div class='trends_container'> <div class="table_container"> <el-table ref="trendsTable" :data="tableList" fit stripe style="width: 100%" border @selection-change="handleSelectionChange"> <slot></slot>//此處用於列表靈活展示 </el-table> </div> <div class="pagination_trends_wrap"> <div class="trends_oprt_wrap"> //將所有列展示在此,可以點選進行隱藏與顯示 <el-popover placement="top-start" width="280" trigger="click"> <div class="trends_btn_wrap"> <el-checkbox-group v-model="visibleList" size="small" @change="visibleListChange"> <el-checkbox v-for="(col, index) in columnList" :key="index" :label="col.label" border >{{col.value}}</el-checkbox> </el-checkbox-group> </div> <el-button slot="reference" size="small">隱藏/顯示列</el-button> </el-popover> </div> <div class="pagination_wrap" v-if="total > 0"> //分頁區域 <template> <el-pagination style="text-align: right;" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page.sync="currentPage" :page-sizes="[10,25,50,100]" :page-size.sync="currentSize" layout="total, sizes, prev, pager, next, jumper" :total="total" background> </el-pagination> </template> </div> </div> </div> </template> <script> export default { name: 'trendsTable', props: { tableList:{//列表資料 type: Array, require: true, default: _ => [] }, hideColumnIndexs:{//需要隱藏的列的下標即表格資料的序號從0開始 type: Array, default: _ => [] }, pageSize:{//每頁幾條資料 type:Number, default:10, }, pageNumber:{//當前頁碼 type:Number, default:1, }, total:{//總資料條數 required: true, type:Number, default:0, }, }, components: {}, data() { return { visibleList:[],//顯示/隱藏列的選中下標資料集合 columnList:[],//表格所有列名稱資料列表 }; }, created() { }, mounted() { let _this = this; var curHideList = []; //頁面初始化:動態獲取表格有用的所有列生成並放入複選列表並記錄初始隱藏列 this.$refs.trendsTable.$children.forEach((obj,index) => { if(obj.type){ _this.columnList.push( { 'label':index, 'value':obj.type == 'selection' ? '選擇' : obj.label, } ); // 記錄初始展示的列 if (_this.hideColumnIndexs.indexOf(index) === -1) { _this.visibleList.push(index) curHideList[index] = false; }else{ curHideList.push(true); } } }); //此向父元件傳遞列是否隱藏的陣列 _this.$emit('getHideColist',curHideList); }, methods: { visibleListChange(item){ // console.log('change',item) var curHideList = []; this.columnList.forEach((obj,index) => { curHideList[index] = false; // 更改顯示隱藏列 if (item.indexOf(index) === -1) { curHideList[index] = true; } }); this.$emit('getHideColist',curHideList); }, }, computed: { }, watch: {}, } </script> <style lang='less' scoped> .trends_container{ .pagination_trends_wrap{ margin: 20px 0; position: relative; } .trends_oprt_wrap{ display: inline-block; vertical-align: top; width: 100px; } .pagination_wrap{ display: inline-block; vertical-align: top; width: calc(100% - 105px); margin: 0 !important; } } </style> <style lang="less"> .trends_btn_wrap{ .el-checkbox-group{ label{ margin: 0 !important; margin: 0 10px !important; margin-bottom: 15px !important; } } } .table_container .el-table .cell{ text-overflow: initial !important; } </style>
參照此元件時主要程式碼:
// 引入-table-元件 import TrendsTable from "@/components/trendsTable.vue";
主要程式碼就是根據子元件返回的陣列利用v-if進行判斷
<trends-table :tableList="onrenewalTableList" :hideColumnIndexs='[]' ref="trendtable" :pageSize.sync="onrenewalForm.pageSize" :pageNumber.sync="onrenewalForm.pageNumber" :total="mbePageTotal" @getHideColist="getHideColist" @pagination = "paginationHadle" @selection-change="handleSelectionChange" > <el-table-column v-if="!columnHideList[0]" type="selection" width="55"> </el-table-column> <el-table-column v-if="!columnHideList[1]" type="index" label="序號" width="50"> <template slot-scope="scope"> {{ (onrenewalForm.pageNumber - 1) * onrenewalForm.pageSize + (scope.$index + 1)}} </template> </el-table-column> <el-table-column prop="codeNo" label="序列號" v-if="!columnHideList[2]"> </el-table-column> <el-table-column prop="proName" label="產品" v-if="!columnHideList[3]"> </el-table-column> <el-table-column prop="proPrice" label="產品定價" width="100px" v-if="!columnHideList[4]"> <template slot-scope="{row}"> <span >{{row.proPrice / 100 | numFormat(2)}}</span> </template> </el-table-column> <el-table-column prop="activeTime" label="啟用時間" v-if="!columnHideList[5]"> <template slot-scope="{row}"> <span >{{ row.activeTime | parseTime('{y}-{m}-{d} {h}:{i}:{s}') }}</span> </template> </el-table-column> </trends-table>
主要就是利用el-table元件此處就做了序號,多選如果需要更多操作可以自定義擴充套件。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45