91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用elementUI?table展開行內嵌套table問題怎么解決

發布時間:2023-04-18 15:29:05 來源:億速云 閱讀:122 作者:iii 欄目:開發技術

這篇“使用elementUI table展開行內嵌套table問題怎么解決”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“使用elementUI table展開行內嵌套table問題怎么解決”文章吧。

    elementUI table展開行內嵌套table

    需求

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

    使用 vue + elementUI

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

    上代碼

    <template>
      <el-table
        :data="tableData"
        >
        <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: '荷蘭優質淡奶,奶香濃而不膩',
              address: '上海市普陀區真北路',
              shop: '王小虎夫妻店',
              shopId: '10333'
            }, {
              id: '12987123',
              name: '好滋好味雞蛋仔',
              category: '江浙小吃、小吃零食',
              desc: '荷蘭優質淡奶,奶香濃而不膩',
              address: '上海市普陀區真北路',
              shop: '王小虎夫妻店',
              shopId: '10333'
            }, {
              id: '12987125',
              name: '好滋好味雞蛋仔',
              category: '江浙小吃、小吃零食',
              desc: '荷蘭優質淡奶,奶香濃而不膩',
              address: '上海市普陀區真北路',
              shop: '王小虎夫妻店',
              shopId: '10333'
            }, {
              id: '12987126',
              name: '好滋好味雞蛋仔',
              category: '江浙小吃、小吃零食',
              desc: '荷蘭優質淡奶,奶香濃而不膩',
              address: '上海市普陀區真北路',
              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是展開行內放的table,正常些就好了,但是遇到的問題是,這個點展開的時候table里面的數據是動態獲取的,剛開始直接定義的是tableData是直接等于動態獲取的值(:tableData=“tableData” 這????樣子的),但是數據有,頁面卻不更新,很多方法試了都不行,emmmm。。。。

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

    <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"> //     當用戶對某一行展開或者關閉的時候會觸發該事件(展開行時,回調的第二個參數為 expandedRows;樹形表格時第二參數為 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數據
          getRowKeys(row) { // 行數據的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值,在展開請求數據后set進row的children
            this.pageInfo.pageNo = 1
            this.queryBigDataOutList() // 接口請求的方法
          }
        },
      }

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

    elementui展開行踩過的坑

    項目需求使用展開行實現表格嵌套,且要根據當前點擊的行來動態獲取展開行中的數據

    總結一下踩過的坑

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

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

    但是這個方法需要每次點擊的時候獲取到當前點擊行的index,并異步請求獲取數據添加到外層表格綁定的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.因為嵌套表格的數據是動態獲取的,所以要保證每次只能展開一行,展開多行會出現每個展開行的表格數據都是一樣的bug

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

    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:{
            //展開行選項變化時觸發
            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({    //發送異步請求獲取嵌套表格數據
                    ···
                }).then(({data})=>{
                    this.rowData = data.list
                })
            },
        }
    }

    以上就是關于“使用elementUI table展開行內嵌套table問題怎么解決”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    苍梧县| 松滋市| 邵武市| 贡山| 北票市| 根河市| 新晃| 喀什市| 津市市| 平陆县| 德格县| 阿城市| 阳西县| 城步| 平阳县| 柯坪县| 沿河| 中西区| 汾阳市| 登封市| 乃东县| 囊谦县| 普安县| 南华县| 盐亭县| 黔西县| 兴业县| 抚州市| 江西省| 左云县| 离岛区| 赫章县| 宜都市| 白山市| 太仆寺旗| 香格里拉县| 凉城县| 观塘区| 新沂市| 息烽县| 井冈山市|