vue+element表格實現(xiàn)多層數(shù)據(jù)的嵌套方式
vue+element表格實現(xiàn)多層數(shù)據(jù)嵌套
今天用element的表格渲染了商城的購物車列表,element的表格之前也用到過,它把所有的東西都封裝好了,
這是完成之后的
只需要往里面?zhèn)鲾?shù)據(jù)就可以了,通過prop來拿到相對應(yīng)的字段,非常方便,但是天不盡人愿吶,后臺接口返回的數(shù)據(jù)
是嵌套多了一層,直接上圖,后臺返回的數(shù)據(jù)結(jié)構(gòu)
data下面是店鋪的名字和id,orderItemList是店鋪下面的商品,店鋪要顯示,商品更要顯示,(難受)
這nm嵌套兩層,表格拿不出來啊,于是各種想思路,什么里邊再套一個表格,這樣會出現(xiàn)空表頭,也從網(wǎng)上找了很多方法,都是差強人意,決心還是要自己解決,當(dāng)我研究了element的表格之后,發(fā)現(xiàn)一個叫樹形數(shù)據(jù),見下圖
我可以把店鋪名字放到尖括號展開啊,再把店鋪下的orderItemList放到尖括號展開下 (我這無處安放的才華)。
我研究了樹形表格之后,發(fā)現(xiàn)無論是展開還是折疊,就拿上圖為例,他的日期的字段必須是一樣的,包括姓名地址也必須是一樣的,但是看我的返回的數(shù)據(jù)不一樣啊,那就要想辦法,于是我就循環(huán)了接口返回的數(shù)據(jù),代碼如下
for(let i = 0; i < res.data.data.length; i++){ this.tableData.push({ 'goodsId':i, 'title':res.data.data[i].sellerName, 'children':res.data.data[i].orderItemList }) }
按照我需要的字段來進行push,在每次循環(huán)之前要把tableData清空掉,不然你曉得,當(dāng)然你也可以讓后臺把接口里的字段改掉,我這里后臺也是拿的別人的改不掉,只能自己想辦法,
樹形數(shù)據(jù)接收一個:
tree-props="{children: ‘children',hasChildren: ‘hasChildren'}"
這里的children是展開下的數(shù)據(jù),這個字段是不是children都可以,說的是引號里的啊,外邊的必須是children,hasChildren是 是否有這個展開下的數(shù)據(jù),
我這里沒有用到,當(dāng)然是用之后還是要做很多的判斷,因為你的店鋪名字也是一行,只顯示店鋪名字,我把我代碼貼出來,看一下
這是表格結(jié)構(gòu)
<el-table :data="tableData" style="width: 90%;" row-key="goodsId" default-expand-all :header-cell-class-name='handleHead' @selection-change="handleSelectionChange" :tree-props="{children: 'children',hasChildren: 'hasChildren'}" > <el-table-column width="55" type="selection" :selectable='handleCheckbox' > </el-table-column> <el-table-column show-overflow-tooltip width="400" label='商品'> <template slot-scope="scope"> <div style="display:inline-block;"> <img v-if="scope.row.picPath" class="shops-img" :src="scope.row.picPath" alt=""> <span>{{scope.row.title}}</span> </div> </template> </el-table-column> <el-table-column label='單價' prop="price"></el-table-column> <el-table-column label='數(shù)量' prop="num"> <template v-if="scope.row.num" slot-scope="scope"> <span @click="shopsNumDown(scope.row.itemId)" class="shops-num-btn curpor">-</span> <span class="shops-num">{{scope.row.num}}</span> <span @click="shopsNumUp(scope.row.itemId)" class="shops-num-btn curpor">+</span> </template> </el-table-column> <el-table-column label='小計' prop="totalFee"></el-table-column> <el-table-column label='操作'> <template v-if="scope.row.price" slot-scope="scope"> <div class="curpor handle-txt" @click="deleteShops(scope.row.itemId)"> 刪除 </div> <div class="curpor handle-txt" @click="addCollection(scope.row.goodsId)"> 移入收藏夾 </div> </template> </el-table-column> </el-table>
方法
我這里用到了多選框勾選商品,當(dāng)el-table-column的type為selection時接受一個方法為selectable,決定誰可以被選擇,我這里是只有商品才能被勾選,所以店鋪就給false掉了。
我把表頭的那個總選框返回一個class名給隱藏了,最好用visibility: hidden;隱藏,它是占位隱藏,為什么給隱藏,是因為勾選了表頭的總選框只能勾選到店鋪,而商品勾選不到,研究了好久也沒有發(fā)現(xiàn),需求也不怎么需要,我就給隱藏了
handleCheckbox(row,index){ if(!row.children){ return true } }, handleHead(row){ if(row.columnIndex === 0){ return 'check-head' } },
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue打包相關(guān)細(xì)節(jié)整理(小結(jié))
這篇文章主要介紹了vue打包相關(guān)細(xì)節(jié)整理(小結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09vue3+vite使用環(huán)境變量.env的一些配置情況詳細(xì)說明
開發(fā)中經(jīng)常會使用環(huán)境變量,Vite相比于Webpack也有一定的變化,下面這篇文章主要給大家介紹了關(guān)于vue3+vite使用環(huán)境變量.env的一些配置情況說明的相關(guān)資料,需要的朋友可以參考下2022-12-12淺談vue獲得后臺數(shù)據(jù)無法顯示到table上面的坑
這篇文章主要介紹了淺談vue獲得后臺數(shù)據(jù)無法顯示到table上面的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08vue router-link傳參以及參數(shù)的使用實例
下面小編就為大家?guī)硪黄獀ue router-link傳參以及參數(shù)的使用實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11vue實現(xiàn)的網(wǎng)易云音樂在線播放和下載功能案例
這篇文章主要介紹了vue實現(xiàn)的網(wǎng)易云音樂在線播放和下載功能,結(jié)合具體實例形式分析了網(wǎng)易云音樂相關(guān)接口調(diào)用與操作技巧,需要的朋友可以參考下2019-02-02