欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue實現(xiàn)一個懶加載的樹狀表格實例

 更新時間:2022年05月31日 09:30:06   作者:婷嘰  
這篇文章主要介紹了vue實現(xiàn)一個懶加載的樹狀表格實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

一個懶加載的樹狀表格實例

實現(xiàn)一個樹狀表格,需要用到vxe-table這個庫,雖然element-ui也能實現(xiàn),但這個庫是專門針對表格做了更多的拓展,功能更多一些。

接下來,說一下使用方式。

安裝

npm install xe-utils vxe-table
// 入口文件引入,一般是main.js
import Vue from 'vue'
import 'xe-utils'
import VXETable from 'vxe-table'
import 'vxe-table/lib/index.css'

Vue.use(VXETable)

// 給 vue 實例掛載全局窗口對象,屬性名稱隨意定義,例如:$XModal
// Vue.prototype.$modal = VXETable.modal

模板

要實現(xiàn)懶加載,tree-config配置參數(shù)如下:

  • lazy: 懶加載
  • hasChild: 是否有子節(jié)點,值應為布爾值。為true則加載children
  • children: 映射的要加載的子節(jié)點集合
  • loadMethod: 實現(xiàn)加載子節(jié)點的方式
<template>
? ? <div>
? ? ? ? ?<vxe-table
? ? ? ? ? ? ?resizable
? ? ? ? ? ? ?row-id="id"
? ? ? ? ? ? ?:tree-config="{lazy: true, children: 'childrens', hasChild: 'hasNaxt', loadMethod: loadChildrenMethod}"
? ? ? ? ? ? ?:data="tableData"
? ? ? ? ? ? ?:checkbox-config="{labelField: 'orgName', highlight: true }"
? ? ? ? ? ? ?@checkbox-change="selectChangeEvent">
? ? ? ? ? ? ?<vxe-table-column type="seq" title="ID" width="100" />
? ? ? ? ? ? ?<vxe-table-column field="orgName" title="組織名稱" type="checkbox" tree-node />
? ? ? ? ? ? ?<vxe-table-column field="orgId" title="企微組織編碼" />
? ? ? ? ? ? ?<vxe-table-column field="status" title="同步狀態(tài)" :formatter="formatStatus" />
? ? ? ? ?</vxe-table>
? ? </div>
</template>

js代碼 

export default {
    data() {
        return {
            tableData: [],
            loading: false
        };
    },
    mounted() {
        // this.tableData = window.MOCK_TREE_DATA_LIST;
        this.$bus.$on('send', data => {
            this.tableData = [data];
        });
    },
    methods: {
        selectChangeEvent({ records }) { // checkbox選中事件
            console.info(`勾選${records.length}個樹形節(jié)點`, records);
        },
        formatStatus({ cellValue, row, column }) { // 格式化方法
			return XEUtils.toDateString(cellValue, 'yyyy-MM-dd HH:ss:mm')
        },
        loadChildrenMethod({ row }) { // 加載子節(jié)點
        	/**
        	* @desc: 這里必須返回一個promise對象,把結(jié)果通過resolve返回。
        	* 因為源碼返回的是一個promise,如果我們的結(jié)果不是promise就會報錯。
        	* `xxxx catch is undefind` cathc的報錯。
        	* 當時腦闊痛了好久。
        	*/
            return new Promise((resolve, reject) => {
                this.$axios
                    .get(`/test/mdporg/workWeixin/queryChildrens?id=${row.id}`)
                    .then(res => {
                        let arr = res.data.childrens;
                        resolve(arr);
                    });
            });
        }
    }
};

使用el-table懶加載樹形表格時的注意點

先放個簡單的el-table例子

<el-table
? ref="refTable"
? :data="tableData"
? :load="loadOrgTable"
? :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
? row-key="orgId"
? lazy
? @expand-change="expandChange"
>
</el-table>

1、版本問題

el-table懶加載執(zhí)行兩次,loading未取消的bug,后面升級版本即可。不升級的情況下可以如下面處理。

mounted() {
? ? // 2.15.3 版本修復了這個bug, 目前版本沒有更新 https://github.com/ElemeFE/element/pull/21041
? ? this.$refs.refTable.store.loadData = function(row, key, treeNode){
? ? ? const { load } = this.table;
? ? ? const { treeData: rawTreeData } = this.states;
? ? ? if (load && !rawTreeData[key].loaded) {
? ? ? ? rawTreeData[key].loading = true;
? ? ? ? load(row, treeNode, data => {
? ? ? ? ? if (!Array.isArray(data)) {
? ? ? ? ? ? throw new Error('[ElTable] data must be an array');
? ? ? ? ? }
? ? ? ? ? const { lazyTreeNodeMap, treeData } = this.states;
? ? ? ? ? // 修復快速切換數(shù)據(jù)時報錯?
? ? ? ? ? if(!treeData[key]) {
? ? ? ? ? ? return
? ? ? ? ? }
? ? ? ? ? treeData[key].loading = false;
? ? ? ? ? treeData[key].loaded = true;
? ? ? ? ? treeData[key].expanded = true;
? ? ? ? ? if (data.length) {
? ? ? ? ? ? this.$set(lazyTreeNodeMap, key, data);
? ? ? ? ? }
? ? ? ? ? this.table.$emit('expand-change', row, true);
? ? ? ? });
? ? ? }
? ? }
? },

2、數(shù)據(jù)顯示

1.tableData是開始時的數(shù)據(jù),后面load懶加載的數(shù)據(jù)都不會在tableData中

2.設置tableData=[],并沒有清空樹里面的數(shù)據(jù),如果下次懶加載返回的是空數(shù)組,但頁面上會顯示上一次的數(shù)據(jù)。(如果你這個時候點擊下載數(shù)據(jù),就會出現(xiàn)下載的內(nèi)容跟表格顯示的不一致)

?resetLazyTree() { ??
?? ?// 單獨設置這個是無效的,大坑~ 一定要清空孩子,否則loadOrgTable返回數(shù)據(jù)在沒有孩子的情況下會顯示上次的孩子節(jié)點
?? ?this.tableData = []?
?? ?this.$set(this.$refs.refTable.store.states, 'lazyTreeNodeMap', {})
},

3.有時表格下方多出一行空白, 或者樹形表格加載子節(jié)點時,可能出現(xiàn)滾動條,導致行錯位。

都可以嘗試重新刷新表格布局

// 對 Table 進行重新布局
refreshTableLayout() {
? ?this.$nextTick(() => {
? ? ?this.$refs.refTable.doLayout()
? ?})
},

3、滾動條

不去改這個默認滾動條的樣式,會少很多問題。。。。 

比如改變了滾動條的寬為現(xiàn)在的一半,那么會出現(xiàn)最后一行的第一列文字被擋住一半。

這個先放著,有好的解決辦法再來。。。

4、數(shù)據(jù)結(jié)構(gòu)

像這種雙表頭的表格,數(shù)據(jù)結(jié)構(gòu)可以如下:

this.tableData = [{
	orgId: 1,
	orgName: '銀行境內(nèi)機構(gòu)匯總',
	hasChildren: true,
	indData: [
		{
			name:"名字1",
			a: '--',
			b: '--',
		},
		{
			name:"2",
			a: '--',
			b: '--',
		},
	],
	children: [],
}]

如果名字欄的表頭先渲染,那么接口indData里面的順序一定要跟著名字的順序,否則會出現(xiàn)數(shù)據(jù)錯亂。

5、el-table的fixed導致的問題

場景:使用excelJs 的DOM類型下載來下載表格中的數(shù)據(jù), 在獲取el-table下載數(shù)據(jù)后,發(fā)現(xiàn)sheet頁中有兩份相同的數(shù)據(jù)。

原因:設置了fixed后,el-table渲染的結(jié)構(gòu)中有兩個table

解決辦法:通過$refs獲取到虛擬dom,刪除第二個表的dom即可, 這里不能獲取真實的dom, 否則頁面受到影響。

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

相關文章

  • vue列表數(shù)據(jù)刪除后主動刷新頁面及刷新方法詳解

    vue列表數(shù)據(jù)刪除后主動刷新頁面及刷新方法詳解

    這篇文章主要給大家介紹了關于vue列表數(shù)據(jù)刪除后主動刷新頁面及刷新方法的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • Vue3 AST解析器-源碼解析

    Vue3 AST解析器-源碼解析

    這篇文章我們從 ast 生成時調(diào)用的 baseParse 函數(shù)分析,再到 baseParse 返回 createRoot 的調(diào)用結(jié)果,一直到細化的講解了 parseChildren 解析子節(jié)點函數(shù)中的其中某一個具體解析器的執(zhí)行過程。最后通過一個簡單模板舉例,需要的朋友可以參考下
    2021-09-09
  • 使用vuex解決刷新頁面state數(shù)據(jù)消失的問題記錄

    使用vuex解決刷新頁面state數(shù)據(jù)消失的問題記錄

    這篇文章主要介紹了使用vuex解決刷新頁面state數(shù)據(jù)消失的問題記錄,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • vue使用swiper的時候第二輪事件不會觸發(fā)問題

    vue使用swiper的時候第二輪事件不會觸發(fā)問題

    這篇文章主要介紹了vue使用swiper的時候第二輪事件不會觸發(fā)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • vue項目報錯:Missing?script:"serve"的解決辦法

    vue項目報錯:Missing?script:"serve"的解決辦法

    這篇文章主要給大家介紹了關于vue項目報錯:Missing?script:"serve"的解決辦法,"missing script: serve"是一個錯誤信息,意味著在執(zhí)行啟動腳本時,找不到名為"serve"的腳本,需要的朋友可以參考下
    2023-11-11
  • Vue中如何對ElementUI的Dialog組件封裝

    Vue中如何對ElementUI的Dialog組件封裝

    這篇文章主要介紹了Vue中如何對ElementUI的Dialog組件封裝問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 在vue中根據(jù)光標的顯示與消失實現(xiàn)下拉列表

    在vue中根據(jù)光標的顯示與消失實現(xiàn)下拉列表

    這篇文章主要介紹了在vue中根據(jù)光標的顯示與消失實現(xiàn)下拉列表,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • Vue使用Echarts畫柱狀圖詳解

    Vue使用Echarts畫柱狀圖詳解

    數(shù)據(jù)的重要性我們大家都知道,就算再小的項目中都可能使用幾個圖表展示,我最近在做項目的過程中也是需要用到圖表,最后選擇了echarts圖表庫,這篇文章主要介紹了Vue使用Echarts畫柱狀圖
    2022-12-12
  • vue實現(xiàn)微信獲取用戶信息的方法

    vue實現(xiàn)微信獲取用戶信息的方法

    這篇文章主要介紹了vue實現(xiàn)微信獲取用戶信息的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • 解決threeJS加載obj?gltf模型后顏色太暗的方法

    解決threeJS加載obj?gltf模型后顏色太暗的方法

    這篇文章主要為大家介紹了解決threeJS加載obj?gltf模型后顏色太暗的方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07

最新評論