最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用elementUI table展開行內(nèi)嵌套table問題

 更新時間:2023年04月18日 14:49:35   作者:知所云  
這篇文章主要介紹了使用elementUI table展開行內(nèi)嵌套table問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

elementUI table展開行內(nèi)嵌套table

需求

產(chǎn)品需要table展開行內(nèi)嵌套一個可以翻頁的table,emmm·····我也不知道她咋想的,那么需要就得試下呀

使用 vue + elementUI

首先,elementui提供了table展開行的一個功能,那么就在這個功能上改造就好了,如果實現(xiàn)的不算特別好,別打我

上代碼

<template>
? <el-table
? ? :data="tableData"
? ? style="width: 100%">
? ? <el-table-column type="expand">
? ? ? <template slot-scope="props">
? ? ? ? <el-form label-position="left" inline class="demo-table-expand">
? ? ? ? ? <el-form-item label="商品名稱">
? ? ? ? ? ? <span>{{ props.row.name }}</span>
? ? ? ? ? </el-form-item>
? ? ? ? ? <el-form-item label="所屬店鋪">
? ? ? ? ? ? <span>{{ props.row.shop }}</span>
? ? ? ? ? </el-form-item>
? ? ? ? ? <el-form-item label="商品 ID">
? ? ? ? ? ? <span>{{ props.row.id }}</span>
? ? ? ? ? </el-form-item>
? ? ? ? ? <el-form-item label="店鋪 ID">
? ? ? ? ? ? <span>{{ props.row.shopId }}</span>
? ? ? ? ? </el-form-item>
? ? ? ? ? <el-form-item label="商品分類">
? ? ? ? ? ? <span>{{ props.row.category }}</span>
? ? ? ? ? </el-form-item>
? ? ? ? ? <el-form-item label="店鋪地址">
? ? ? ? ? ? <span>{{ props.row.address }}</span>
? ? ? ? ? </el-form-item>
? ? ? ? ? <el-form-item label="商品描述">
? ? ? ? ? ? <span>{{ props.row.desc }}</span>
? ? ? ? ? </el-form-item>
? ? ? ? </el-form>
? ? ? </template>
? ? </el-table-column>
? ? <el-table-column
? ? ? label="商品 ID"
? ? ? prop="id">
? ? </el-table-column>
? ? <el-table-column
? ? ? label="商品名稱"
? ? ? prop="name">
? ? </el-table-column>
? ? <el-table-column
? ? ? label="描述"
? ? ? prop="desc">
? ? </el-table-column>
? </el-table>
</template>
<style>
? .demo-table-expand {
? ? font-size: 0;
? }
? .demo-table-expand label {
? ? width: 90px;
? ? color: #99a9bf;
? }
? .demo-table-expand .el-form-item {
? ? margin-right: 0;
? ? margin-bottom: 0;
? ? width: 50%;
? }
</style>
<script>
? export default {
? ? data() {
? ? ? return {
? ? ? ? tableData: [{
? ? ? ? ? id: '12987122',
? ? ? ? ? name: '好滋好味雞蛋仔',
? ? ? ? ? category: '江浙小吃、小吃零食',
? ? ? ? ? desc: '荷蘭優(yōu)質(zhì)淡奶,奶香濃而不膩',
? ? ? ? ? address: '上海市普陀區(qū)真北路',
? ? ? ? ? shop: '王小虎夫妻店',
? ? ? ? ? shopId: '10333'
? ? ? ? }, {
? ? ? ? ? id: '12987123',
? ? ? ? ? name: '好滋好味雞蛋仔',
? ? ? ? ? category: '江浙小吃、小吃零食',
? ? ? ? ? desc: '荷蘭優(yōu)質(zhì)淡奶,奶香濃而不膩',
? ? ? ? ? address: '上海市普陀區(qū)真北路',
? ? ? ? ? shop: '王小虎夫妻店',
? ? ? ? ? shopId: '10333'
? ? ? ? }, {
? ? ? ? ? id: '12987125',
? ? ? ? ? name: '好滋好味雞蛋仔',
? ? ? ? ? category: '江浙小吃、小吃零食',
? ? ? ? ? desc: '荷蘭優(yōu)質(zhì)淡奶,奶香濃而不膩',
? ? ? ? ? address: '上海市普陀區(qū)真北路',
? ? ? ? ? shop: '王小虎夫妻店',
? ? ? ? ? shopId: '10333'
? ? ? ? }, {
? ? ? ? ? id: '12987126',
? ? ? ? ? name: '好滋好味雞蛋仔',
? ? ? ? ? category: '江浙小吃、小吃零食',
? ? ? ? ? desc: '荷蘭優(yōu)質(zhì)淡奶,奶香濃而不膩',
? ? ? ? ? address: '上海市普陀區(qū)真北路',
? ? ? ? ? shop: '王小虎夫妻店',
? ? ? ? ? shopId: '10333'
? ? ? ? }]
? ? ? }
? ? }
? }
</script>

這個是elementui提供的,那么需要改造el-table-column type=“expand”

代碼如下

?<el-table-column fixed="right" align="center" label="操作" width="80" type="expand">
? ? ? ? ? <template slot-scope="scope" ? v-loading.fullscreen.lock="loading">
? ? ? ? ? ? <tableList :pageInfo='pageInfo' v-if="showTableData" :tableData="scope.row.children" @getListInfo="getListInfo" @currentChange='currentChangeTableList'></tableList>
? ? ? ? ? </template>
?</el-table-column>

tableList是展開行內(nèi)放的table,正常些就好了,但是遇到的問題是,這個點展開的時候table里面的數(shù)據(jù)是動態(tài)獲取的,剛開始直接定義的是tableData是直接等于動態(tài)獲取的值(:tableData=“tableData” 這??樣子的),但是數(shù)據(jù)有,頁面卻不更新,很多方法試了都不行,emmmm。。。。

有點坑,然后看提供的是從scope.row的children獲取數(shù)據(jù)的,所以接口獲取數(shù)據(jù)之后set進這個row的children內(nèi)就可以實現(xiàn)了,但是前提要獲取這個行所在的index,剛好這邊需求是展開后其他展開行要收起,所以兩個結(jié)合一下就能實現(xiàn)了

<el-table
? ? ? ? :data="list"
? ? ? ? stripe
? ? ? ? border
? ? ? ? size="small"
? ? ? ? :height="tableHeight"
? ? ? ? v-loading="loading"
? ? ? ? :row-key="getRowKeys"
? ? ? ? :expand-row-keys="expands"
? ? ? ? element-loading-text="拼命加載中"
? ? ? ? @expand-change="expandChange"> // ?? ?當用戶對某一行展開或者關(guān)閉的時候會觸發(fā)該事件(展開行時,回調(diào)的第二個參數(shù)為 expandedRows;樹形表格時第二參數(shù)為 expanded)
? ? ??
? ? ? ? <el-table-column fixed="right" align="center" label="操作" width="80" type="expand">
? ? ? ? ? <template slot-scope="scope" ? v-loading.fullscreen.lock="loading">
? ? ? ? ? ? <tableList :pageInfo='pageInfo' v-if="showTableData" :tableData="scope.row.children" @getListInfo="getListInfo" @currentChange='currentChangeTableList'></tableList>
? ? ? ? ? </template>
? ? ? ? </el-table-column>
? ? ? </el-table>

js代碼

?data() {
? ? return {
? ? pageInfo:{
? ? ? ? total:0,
? ? ? ? pageNo:1,
? ? ? ? pageSize:5
? ? },
? ? expands: [] ,
? ? ? list: [], // table數(shù)據(jù)
? ? ? getRowKeys(row) { // 行數(shù)據(jù)的Key
? ? ? ? ?return row.vehID
? ? ? },
??
? },
? methods:{
? ?expandChange(row,expandedRows){
? ? ? this.showTableData = false
? ? ? this.expands = []
? ? ? if (expandedRows.length > 0) {
? ? ? ? ?row ? this.expands.push(row.vehID) : '' // 只展開一行
? ? ? ? ?this.indexRow = this.list.indexOf(row) ?//獲取index值,在展開請求數(shù)據(jù)后set進row的children
? ? ? ? this.pageInfo.pageNo = 1
? ? ? ? this.queryBigDataOutList() // 接口請求的方法
? ? ? }
? ? },
? }

到這里差不多就完成了,但是在點擊內(nèi)部table翻頁的時候數(shù)據(jù)更新會出現(xiàn)問題,所以給tableList設(shè)置了v-if這樣數(shù)據(jù)就可以實時更新渲染頁面了,因為接口請求反應(yīng)會比較慢,所以加了一個v-loading.fullscreen.lock="loading"加載

elementui展開行踩過的坑

項目需求使用展開行實現(xiàn)表格嵌套,且要根據(jù)當前點擊的行來動態(tài)獲取展開行中的數(shù)據(jù)

總結(jié)一下踩過的坑

1.展開行中的表格data綁定的必須是外層表格中的數(shù)據(jù)的子項,否則會出現(xiàn)第一次點擊展開嵌套表格不顯示,點擊兩次才會顯示的bug

export default {
? ? data(){
? ? ? ? return{
? ? ? ? ? ? tableData:[{ ? ? //外層綁定的data
? ? ? ? ? ? ?? ?name:'xiaoming',
? ? ? ? ? ? ?? ?age:'18',
? ? ? ? ? ? ?? ?rowData:[], ? ?//展開行表格綁定的data
? ? ? ? ? ? }],
? ? ? ? }
? ? },
}

但是這個方法需要每次點擊的時候獲取到當前點擊行的index,并異步請求獲取數(shù)據(jù)添加到外層表格綁定的data中,這樣有些麻煩,我想單獨定義一個變量來綁定嵌套的表格

get到一個不是太好的解決方法,在展開行的tem中加上slot-scope=“scope”,但下面不用使用這個scope,vscode中可能會紅線報錯,但不影響正常效果

? ? <el-table-column
? ? ?type="expand">
? ? ? ? <template slot-scope="scope"> ? //這里scope會報錯
? ? ? ? ?? ?<el-table?
? ? ? ? ?? ?:data="rowData">
? ? ? ? ?? ??? ?...
? ? ? ? ?? ?</el-table>
? ? ? ? </template>
? ? </el-table-column>

export default {
? ? data(){
? ? ? ? return{
? ? ? ? ? ? tableData:[], ? ?//外層綁定的data
? ? ? ? ? ? rowData:[], ? ?//展開行表格綁定的data
? ? ? ? }
? ? },
}

2.因為嵌套表格的數(shù)據(jù)是動態(tài)獲取的,所以要保證每次只能展開一行,展開多行會出現(xiàn)每個展開行的表格數(shù)據(jù)都是一樣的bug

實現(xiàn)每次只能展開一行,給外層表格添加如下屬性

tem

?? ?<el-table?
?? ??? ?:data="tableData"
?? ??? ?:row-key='getRowKeys'
?? ? ? ?? ?:expand-row-keys="expands"
?? ? ? ?? ?@expand-change="expandChange">
?? ? ??? ??? ?...
??? ?</el-table>

js:

?? ?export default {
? ? data(){
? ? ? ? return{
? ? ? ? ? ? tableData:[], ? ?//外層綁定的data
? ? ? ? ? ? rowData:[], ? ?//展開行表格綁定的data
? ? ? ? ? ? expands: [],
? ? ? ? ? ? getRowKeys (row) {
? ? ? ? ? ? ? return row.id
? ? ? ? ? ? },
? ? ? ? }
? ? },
? ? ?methods:{
?? ??? ?//展開行選項變化時觸發(fā)
? ? ? ? expandChange(row,expandedRows){
? ? ? ? ? ? this.rowData = []
? ? ? ? ? ? var that = this
? ? ? ? ? ? if (expandedRows.length) {
? ? ? ? ? ? ? that.expands = []
? ? ? ? ? ? ? if (row) {
? ? ? ? ? ? ? ? that.expands.push(row.id)
? ? ? ? ? ? ? }
? ? ? ? ? ? } else {
? ? ? ? ? ? ? that.expands = []
? ? ? ? ? ? }

? ? ? ? ? ? this.$http({ ? ?//發(fā)送異步請求獲取嵌套表格數(shù)據(jù)
? ? ? ? ? ? ? ? ···
? ? ? ? ? ? }).then(({data})=>{
? ? ? ? ? ? ? ? this.rowData = data.list
? ? ? ? ? ? })
? ? ? ? },
?? ?}
}

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 十個有用的自定義Vue鉤子函數(shù)總結(jié)

    十個有用的自定義Vue鉤子函數(shù)總結(jié)

    這篇文章主要為大家介紹了十個Vue.js中有用的自定義鉤子,讓我們的代碼更加好看。文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-04-04
  • vue調(diào)用微信JSDK 掃一掃,相冊等需要注意的事項

    vue調(diào)用微信JSDK 掃一掃,相冊等需要注意的事項

    這篇文章主要介紹了vue調(diào)用微信JSDK 掃一掃,相冊等需要注意的事項,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2021-01-01
  • Vue3?中的插件和配置推薦大全

    Vue3?中的插件和配置推薦大全

    這篇文章主要介紹了Vue3?中的插件和配置推薦大全,本文通過圖文實例代碼相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • element用腳本自動化構(gòu)建新組件的實現(xiàn)示例

    element用腳本自動化構(gòu)建新組件的實現(xiàn)示例

    本文主要介紹了element-ui的用腳本自動化構(gòu)建新組件的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • vue3中組件事件和defineEmits示例代碼

    vue3中組件事件和defineEmits示例代碼

    這篇文章主要給大家介紹了關(guān)于vue3中組件事件和defineEmits的相關(guān)資料,組件事件是Vue組件之間進行通信的一種方式,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2023-10-10
  • 詳解Vue-基本標簽和自定義控件

    詳解Vue-基本標簽和自定義控件

    本篇文章主要介紹了Vue-基本標簽和自定義控件,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • vue中{__ob__: observer}對象轉(zhuǎn)化為數(shù)組進行遍歷方式

    vue中{__ob__: observer}對象轉(zhuǎn)化為數(shù)組進行遍歷方式

    這篇文章主要介紹了vue中{__ob__: observer}對象轉(zhuǎn)化為數(shù)組進行遍歷方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Vue數(shù)據(jù)雙向綁定原理及簡單實現(xiàn)方法

    Vue數(shù)據(jù)雙向綁定原理及簡單實現(xiàn)方法

    vue數(shù)據(jù)雙向綁定是通過數(shù)據(jù)劫持結(jié)合發(fā)布者-訂閱者模式的方式來實現(xiàn)的.本文重點給大家介紹Vue數(shù)據(jù)雙向綁定原理及簡單實現(xiàn)方法,感興趣的朋友跟隨腳本之家小編一起學習吧
    2018-05-05
  • Vue使用mixin分發(fā)組件的可復(fù)用功能

    Vue使用mixin分發(fā)組件的可復(fù)用功能

    這篇文章主要介紹了Vue使用mixin分發(fā)組件的可復(fù)用功能,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • Vue3中使用Pinia的方法詳細介紹

    Vue3中使用Pinia的方法詳細介紹

    這篇文章主要給大家介紹了關(guān)于Vue3中使用Pinia的相關(guān)資料,pinia是一個用于vue的狀態(tài)管理庫,類似于vuex,是vue的另一種狀態(tài)管理工具,文中介紹的非常詳細,需要的朋友可以參考下
    2024-01-01

最新評論

蓝田县| 邯郸市| 左贡县| 定南县| 汕头市| 昆山市| 芜湖县| 台州市| 黄石市| 新绛县| 曲松县| 绥中县| 乐业县| 永和县| 慈利县| 舟山市| 吉水县| 广水市| 于田县| 聊城市| 江陵县| 遵义市| 天峻县| 山西省| 象山县| 肥西县| 宁城县| 黑河市| 锦州市| 虎林市| 新营市| 乌兰浩特市| 公主岭市| 延长县| 镇江市| 齐齐哈尔市| 张北县| 汉中市| 杂多县| 绵阳市| 郸城县|