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

使用el-table做成樹形結(jié)構(gòu)并解決數(shù)據(jù)驅(qū)動視圖問題

 更新時間:2024年07月25日 10:21:13   作者:愛跳舞的程序員  
這篇文章主要介紹了使用el-table做成樹形結(jié)構(gòu)并解決數(shù)據(jù)驅(qū)動視圖問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

el-table做成樹形結(jié)構(gòu)并解決數(shù)據(jù)驅(qū)動視圖問題

我們在完成一個樹形表格后,需要對數(shù)據(jù)進行增刪改查動作,同時讓我們保存數(shù)據(jù)渲染到表格上。

這時我們就會發(fā)現(xiàn)一個大大滴問題?。?!

我們在對第一層樹狀結(jié)構(gòu)表格進行增刪改后,再調(diào)取刷新列表方法是正常渲染的。但是我們給第一層增加子級時候,或者刪除第二層內(nèi)數(shù)據(jù),亦或者修改第二層以內(nèi)數(shù)據(jù)就會發(fā)現(xiàn),調(diào)取的刷新列表方法是沒有效果,我們再手動刷新頁面后數(shù)據(jù)才會渲染上去???! 

這個問題讓我心里一咯噔,不會吧不會吧?。?!又讓我碰上這該s的難題o(╥﹏╥)o

我在網(wǎng)友博客上找到一種方法:lazyTreeNodeMap 是 el-table 組件中的一個屬性,用于存儲懶加載樹節(jié)點的映射關(guān)系。

話不多說,開整!

整體架構(gòu)流程

第一步:首先我們先把el-table的樹形結(jié)構(gòu)搭出來,如果還沒有做好樹形table表,可以看一下我之前文章有一遍如何搭建的

<el-table
		ref="tableRef"
		lazy
		border
		highlight-current-row
		height="300"
		row-key="listId"
		style="width: 100%; margin-bottom: 10px"
		:load="load"
		:data="list"
		:default-expand-all="isExpandAll"
		:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
>

第二步:我們在data里面聲明一個map來存儲我們load回調(diào)數(shù)據(jù)

maps: new Map(),

第三步:加載子節(jié)點數(shù)據(jù)的函數(shù),lazy 為 true 時生效,函數(shù)第二個參數(shù)包含了節(jié)點的層級信息。

這里獲取子節(jié)點數(shù)據(jù),同時把加載子節(jié)點數(shù)據(jù)存進maps

load(tree, treeNode, resolve) {
	this.maps.set(tree.listId, { tree, treeNode, resolve });
	getUdmBppjDataList({ listId: tree.listId }).then((res) => {
		const childList = res.rows;
		// 必要設(shè)置,不然沒有下級圖標
		childList.forEach((item) => {
			(item.hasChildren = true), (item.children = null);
		});
		setTimeout(() => {
			resolve(childList);
		}, 200);
	});
},

第四步:這個是刷新的方法 ,主要是刷新子級列表數(shù)據(jù)的方法,我們在增加、修改、刪除子級時候調(diào)用這個方法。如果為你對最外層進行增刪改查不需要調(diào)用該方法。

整編文章精髓主要在這段代碼上: this.$refs.tableRef.store.states.lazyTreeNodeMap

refresh(parentId) {
	// 根據(jù)父級id取出對應(yīng)節(jié)點數(shù)據(jù)
	const { row, treeNode, resolve } = this.maps.get(parentId);
	// 通過接口獲取想要刷新的 父節(jié)點里面所有子節(jié)點數(shù)據(jù)的數(shù)組
	getUdmBppjDataList({ listId: parentId }).then((res) => {
		res.rows.forEach((item) => {
			// 必要設(shè)置,不然沒有下級圖標
			item.hasChildren = true;
			item.children = null;
		});
		// 這個是刷新的方法 最后一個參數(shù)是最新的子節(jié)點數(shù)據(jù)的數(shù)組--相當(dāng)于吧新數(shù)組替換舊數(shù)組
		this.$set(this.$refs.tableRef.store.states.lazyTreeNodeMap, parentId, res.rows);
	});
 
	if (row) {
		this.load(row, treeNode, resolve);
	}
},

第五步:這是我調(diào)用上面的我們寫的刷新的方法。

tip:一定要注意執(zhí)行順序,負責(zé)會出現(xiàn)線程問題,有時候能增加成功有時候又不行!??!

if (this.titleDialog === '增加同級部件信息') {
	postUdmBppjDataList(obj).then((res) => {
		this.$message({
			message: '增加同級部件信息成功!',
			type: 'success',
			duration: 1000,
		});
		this.getList();
		// 當(dāng)table 里面沒有數(shù)據(jù)時候不調(diào)用 refresh 和 當(dāng)點擊第一層時候也不調(diào)用
		if (this.list.length > 0 && this.list[0].parentListId !== this.rowData.parentListId) {
			this.refresh(this.rowData.parentListId);
		}
	});
} 

第六步:去嘗試我們寫的方法吧!

技術(shù)名詞解釋

load(tree, treeNode, resolve):

  • tree:表示當(dāng)前的樹形數(shù)據(jù)結(jié)構(gòu),通常是整棵樹的數(shù)據(jù)。在調(diào)用 load 方法時,會傳入當(dāng)前的樹形數(shù)據(jù)結(jié)構(gòu),您可以通過該參數(shù)獲取整棵樹的數(shù)據(jù)。
  • treeNode:表示當(dāng)前需要加載子節(jié)點數(shù)據(jù)的樹節(jié)點對象。在調(diào)用 load 方法時,會傳入需要加載子節(jié)點數(shù)據(jù)的樹節(jié)點對象,您可以通過該參數(shù)獲取該節(jié)點的相關(guān)信息,如節(jié)點數(shù)據(jù)、父節(jié)點等。
  • resolve:是一個回調(diào)函數(shù),用于在獲取子節(jié)點數(shù)據(jù)后進行回調(diào)處理。您需要在 load 方法中獲取子節(jié)點數(shù)據(jù),并在獲取數(shù)據(jù)后調(diào)用 resolve 函數(shù)并傳入子節(jié)點數(shù)據(jù),以告知 el-table 組件加載成功并渲染子節(jié)點數(shù)據(jù)。

總結(jié)

這里的難點就是不知道有 lazyTreeNodeMap 這個屬性,和使用他的方法!

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

相關(guān)文章

  • vue+express生成token方式

    vue+express生成token方式

    這篇文章主要介紹了vue+express生成token方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 基于VuePress 輕量級靜態(tài)網(wǎng)站生成器的實現(xiàn)方法

    基于VuePress 輕量級靜態(tài)網(wǎng)站生成器的實現(xiàn)方法

    VuePress是一個基于Vue的輕量級靜態(tài)網(wǎng)站生成器以及為編寫技術(shù)文檔而優(yōu)化的默認主題。這么文章給大家詳細介紹了vuepress 靜態(tài)網(wǎng)站生成器的方法,需要的朋友參考下吧
    2018-04-04
  • Vue實現(xiàn)微信小程序中預(yù)覽文件的縮放功能

    Vue實現(xiàn)微信小程序中預(yù)覽文件的縮放功能

    在微信小程序中,默認情況下,文件預(yù)覽功能不支持文檔縮放,導(dǎo)致用戶在遇到小字體時難以清晰閱讀,為了解決這一問題并提升用戶體驗,實現(xiàn)文檔的縮放功能至關(guān)重要,所以本文
    2024-12-12
  • vue-cli3打包時圖片壓縮處理方式

    vue-cli3打包時圖片壓縮處理方式

    這篇文章主要介紹了vue-cli3打包時圖片壓縮處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 在vue中使用?jquery?的兩種方法小結(jié)

    在vue中使用?jquery?的兩種方法小結(jié)

    這篇文章主要介紹了在vue中使用?jquery?的兩種方法小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 如何查看vue項目的node版本

    如何查看vue項目的node版本

    文章總結(jié):查看Vue項目中使用的Node版本,特別是當(dāng)項目使用Yarn和TypeScript時,可以通過查看yarn.lock文件中的@types/node@version來確定版本
    2025-01-01
  • Vue如何給組件添加點擊事件?@click.native

    Vue如何給組件添加點擊事件?@click.native

    這篇文章主要介紹了Vue如何給組件添加點擊事件?@click.native,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 淺談vue 單文件探索

    淺談vue 單文件探索

    這篇文章主要介紹了淺談vue 單文件探索,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • Vue的Props實例配置詳解

    Vue的Props實例配置詳解

    props主要用于組件的傳值,他的工作就是為了接收外面?zhèn)鬟^來的數(shù)據(jù),與data、el、ref是一個級別的配置項,下面這篇文章主要給大家介紹了關(guān)于Vue組件如何設(shè)置Props的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • vue 3 中watch 和watchEffect 的新用法

    vue 3 中watch 和watchEffect 的新用法

    本篇文章主要通過 Options API 和 Composition API 對比 watch 的使用方法,讓大家快速掌握 vue3 中 watch 新用法,需要的朋友可以參考一下哦,希望對大家有所幫助
    2021-11-11

最新評論