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

el-table分頁多選及回顯方式

 更新時間:2026年01月22日 10:37:59   作者:四木Zhang  
這篇文章主要介紹了el-table分頁多選及回顯方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

使用e-table分頁多選,回顯

很多次碰到要做表格多選加分頁的,在這里記錄一下

主要需求

  • 表格要求可以多選,可以分頁
  • 選擇數(shù)據(jù)之后,切換分頁數(shù)據(jù)仍存在,再次切換回去,能正常回顯

功能展示

左側(cè)為table表格,右側(cè)是已選擇的展示

  • 首頁選擇人員

  • 第二頁選擇人員,第一頁選擇的數(shù)據(jù)仍在

  • 切換回第一頁,正?;仫@數(shù)據(jù)

  • 選擇的數(shù)據(jù)傳遞到界面

  • 再次打開彈窗,數(shù)據(jù)仍正?;仫@

具體實現(xiàn)

首先,給表格添加分頁與選擇功能

<!-- table表頭設置row-key,需要唯一標識 -->
<el-table :row-key="(row) => { return row.userId }" ></el-table>
    
<!-- 添加多選,設置type="selection" -->
<el-table-column type="selection" width="55" :reserve-selection="true">
</el-table-column>

<!-- 添加分頁組件 -->
<el-pagination :page-sizes="[10, 50, 100]" :currentpage="Number(form.pageNum)" :page-size="Number(form.pageSize)" :total="Number(form.total)" layout="prev,pager,next,sizes,jumper" @size-change="onSizeChange"
@current-change="onCurrentChange" />

表格做了分頁功能,切頁會請求后臺,之前選擇的的數(shù)據(jù)的勾選狀態(tài)就不存在了,element提供了reserve-selection可以保存數(shù)據(jù)更新前選中的值,這個屬性需要搭配 row-key 指定一個唯一標識。所以要在表格多選列設置reserve-selection='true'

當設置了row-key和reserve-selection基本就成了

使用selection-change函數(shù)記錄勾選的值

  • selection-change:當選項發(fā)生變化時會觸發(fā)該函數(shù)
<el-table @selection-change="handleSelectionChange" ></el-table>

//selectList為勾選的值組成的數(shù)組
handleSelectionChange(arr) {
      this.selectList = arr
}

回顯數(shù)據(jù):

通過element提供的內(nèi)置函數(shù)toggleRowSelection()來實現(xiàn)我們的數(shù)據(jù)回顯

//給table設置ref屬性
<el-table ref="multipleTable" :data="tableData"></el-table>

//數(shù)據(jù)回顯
toggleSelection(rows) {
    //使用$nextTick,保證dom已經(jīng)更新
    this.$nextTick(() => {
        setTimeout(() => {
            //保證有值再進行比對,避免報錯
            if (rows && this.tableData.length != 0) {
                //遍歷table表格數(shù)據(jù)與要回顯的數(shù)組比對,匹配成功的設置為選中狀態(tài)
                this.tableData.forEach((row) => {
                    rows.forEach((item) => {
                        if (row.userId == item.userId) {
                            //判斷唯一標識,若是id一樣,則設置該行選中狀態(tài)為true
                            this.$refs.multipleTable.toggleRowSelection(row, true)
                        }
                    })
                })
            } else {
                this.$refs.multipleTable.clearSelection();
            }
        }, 0);
    });
}

注意:因為我們這里做了分頁,分頁時會重新請求后臺,所以每次請求后要調(diào)用一次toggleSelection函數(shù)來回顯當前頁的數(shù)據(jù)

  • 至此,我們表格的分頁多選回顯功能就做的差不多了

完整代碼

  • 僅供參考
<el-table :data="tableData" @row-click="rowClick" @selection-change="handleSelectionChange" ref="multipleTable" stripe border style="width: 100%" :row-key="(row) => { return row.userId }" height="calc(100% - 48px)">
	<el-table-column type="selection" width="55" :reserve-selection="true">
    </el-table-column>
    <el-table-column type="index" label="序號" align="center" width="50px">
        <template slot-scope="scope">
            {{ (form.pageNum - 1) * form.pageSize + scope.$index + 1 }}
         </template>
     </el-table-column>
     <el-table-column align="center" label="姓名" prop="userName" />
</el-table>
<el-pagination :page-sizes="[50, 100, 1000, 2000]" :current-page="Number(form.pageNum)"  :page-size="Number(form.pageSize)" :total="Number(form.total)" layout="prev,pager,next,sizes,jumper" @size-change="onSizeChange"  @current-change="onCurrentChange" />

<script>
export default {
	data() {
        return {
            tableData: [],//表格table
            form: {
                pageNum: 1,
                pageSize: 50,
                total: 0,
            },
            selectList: [],//選中的list
        };
    },
    mounted() {
        this.getList()
    },
    methods: {
        // 獲取列表
        async getList() {
            let { rows, total } = await user_list(this.form);
            this.tableData = rows;
            this.form.total = total
            this.toggleSelection(this.selectList)
        },
        // 選擇人員發(fā)生變化時
        handleSelectionChange(arr) {
            this.selectList = arr
        },
        // 數(shù)據(jù)回顯
        toggleSelection(rows) {
            this.$nextTick(() => {
                setTimeout(() => {
                    if (rows && this.tableData.length != 0) {
                        this.tableData.forEach((row) => {
                            rows.forEach((item) => {
                                if (row.userId == item.userId) { this.$refs.multipleTable.toggleRowSelection(row, true)
                                }
                            })
                        })
                    } else {
                        this.$refs.multipleTable.clearSelection();
                    }
                }, 0);
            });
        },
        //分頁
        onSizeChange(size) {
            this.form.pageSize = size
            this.getList();
        },
        onCurrentChange(current) {
            this.form.pageNum = current
            this.getList();
        },
    },
}   
</script>

補充

做好之后,發(fā)現(xiàn)是存在一些bug的

初次數(shù)據(jù)回顯時,會觸發(fā)handleSelectionChange函數(shù),導致傳入的list被覆蓋修改,切換分頁時后面的數(shù)據(jù)已經(jīng)不存在了

  • 解決方案:data中添加一個flag變量來判斷編輯回顯
falg:false,
    
handleSelectionChange(arr) {
    if (this.falg) return
    this.selectList = arr
},
toggleSelection(rows) {
    this.$nextTick(() => {
        setTimeout(() => {
            this.rowSelectFlag = true
            ... 
            this.rowSelectFlag = false
        }, 0);
    });
},

回顯數(shù)據(jù)后進行修改數(shù)據(jù),只會保存當前頁的數(shù)據(jù),其他分頁的數(shù)據(jù)被刷掉

總結(jié)

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

相關文章

  • Vue手寫實現(xiàn)組件初渲染

    Vue手寫實現(xiàn)組件初渲染

    這篇文章主要介紹了Vue手寫實現(xiàn)組件初渲染,在Vue進行文本編譯之后,會得到代碼字符串生成的render函數(shù),本文會基于render函數(shù)展開主題相關內(nèi)容,感興趣的朋友可以參考一下
    2022-08-08
  • vue如何給自定義的組件綁定點擊事件

    vue如何給自定義的組件綁定點擊事件

    這篇文章主要介紹了vue如何給自定義的組件綁定點擊事件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 如何利用vue-cli監(jiān)測webpack打包與啟動時長

    如何利用vue-cli監(jiān)測webpack打包與啟動時長

    這篇文章主要給大家介紹了關于如何利用vue-cli監(jiān)測webpack打包與啟動時長的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-02-02
  • Vue中的循環(huán)遍歷與key值原理解讀

    Vue中的循環(huán)遍歷與key值原理解讀

    這篇文章主要介紹了Vue中的循環(huán)遍歷與key值原理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 詳解如何在Vue Router中實現(xiàn)動態(tài)路由匹配

    詳解如何在Vue Router中實現(xiàn)動態(tài)路由匹配

    在構(gòu)建復雜的單頁面應用程序(SPA)時,動態(tài)路由匹配是一項強大的功能,它允許我們根據(jù)URL中的參數(shù)動態(tài)加載內(nèi)容,Vue Router 提供了動態(tài)路由匹配的能力,使得我們可以根據(jù)不同的URL參數(shù)展示不同的組件或數(shù)據(jù),本文將介紹如何在Vue Router中實現(xiàn)動態(tài)路由匹配
    2025-05-05
  • 在vue中使用jsonp進行跨域請求接口操作

    在vue中使用jsonp進行跨域請求接口操作

    這篇文章主要介紹了在vue中使用jsonp進行跨域請求接口操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Vue+Java 通過websocket實現(xiàn)服務器與客戶端雙向通信操作

    Vue+Java 通過websocket實現(xiàn)服務器與客戶端雙向通信操作

    這篇文章主要介紹了Vue+Java 通過websocket實現(xiàn)服務器與客戶端雙向通信操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • vue懸浮可拖拽懸浮按鈕的實例代碼

    vue懸浮可拖拽懸浮按鈕的實例代碼

    這篇文章主要介紹了vue懸浮可拖拽懸浮按鈕的實例代碼,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • vue作用域插槽詳解、slot、v-slot、slot-scope

    vue作用域插槽詳解、slot、v-slot、slot-scope

    這篇文章主要介紹了vue作用域插槽詳解、slot、v-slot、slot-scope,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • vue在antDesign框架或elementUI框架組件native事件中觸發(fā)2次問題

    vue在antDesign框架或elementUI框架組件native事件中觸發(fā)2次問題

    這篇文章主要介紹了vue在antDesign框架或elementUI框架組件native事件中觸發(fā)2次問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04

最新評論

方山县| 河间市| 循化| 山丹县| 常熟市| 盘山县| 庆安县| 新泰市| 广元市| 舟曲县| 泾川县| 宜春市| 敖汉旗| 泾阳县| 同德县| 江达县| 田阳县| 卫辉市| 珠海市| 都昌县| 龙泉市| 屏东县| 迭部县| 郁南县| 应城市| 海城市| 秭归县| 深泽县| 甘南县| 涡阳县| 陕西省| 松溪县| 浏阳市| 益阳市| 桂林市| 呈贡县| 阿城市| 文成县| 临安市| 嘉兴市| 泽州县|