<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
使用element tree實現懶載入,更新某一節點的資料
只需要在el-tree標籤上面新增lazy,load屬性,load的接收是一個函數。這裡貼上官網給出的方法
<el-tree :data="treeList" ref="tree" class="vue-tree" lazy :load="loadNode" :highlight-current="true" :node-key="nodeKey" @node-click="nodeClick" :expand-on-click-node="false" :props="defaultProps" ></el-tree>
// 懶載入獲取樹形結構 loadNode(node, resolve) { //呼叫介面時,我們的需求是第一級傳參為0,後面為當前節點的唯一表示id,可以根據需求而定 // node.level為0時,就是tree的第一級 const spaceParentGuid = node.level === 0 ? 0 : node.data.spaceGuid getDeviceLazyTree({ spaceParentGuid }).then(({ data }) => { resolve( data.data.map(item => { return { ...item, leaf: !item.hasChildren // 此引數用來判斷當前節點是否為葉子節點 } }) ) }) },
當我們使用的tree懶載入,只會載入到我們請求的那一層級,所以當我們在葉子節點請求時,請求完不會出現資料,這樣的體驗就不是很好,這個時候就需要藉助tree的props裡面isLeaf的設定方法了
defaultProps: { children: 'children', label: 'spaceName', isLeaf: 'leaf' }
加上此欄位,就可以清晰的看出哪些節點為葉子節點了
那我們在對tree介面進行增刪改查時,及時重新整理資料時,就會造成我們還需要從新獲取介面
其實如果我們仔細觀察的話,我們會發現已經請求過的節點,我們收起,再次開啟是不會請求介面的,這樣的話,我們可以這麼做
/** * 單獨重新整理節點 * guid: 當前節點的父級唯一標識節點 */ refreshTreeNode(guid) { let node = this.$refs.tree.getNode(guid) if (node) { node.loaded = false node.expand() // 主動呼叫展開節點方法,重新查詢該節點下的所有子節點 } },
element 樹表懶載入在每次對錶格進行修改刪除等操作後需要重新整理表格資料時都需要重新請求,在逐增展開載入,這樣對使用者來說不太友好所以我們稍微解決一些
第一步:定義一個Map
用來儲存表格懶載入每次展開時所點選的當前行{tree,treeNode,resolve}
data(){ return{ maps: new Map(), // 先在你的data內搞一個map用於儲存接下來必要的資料 } }
第二步:在load方法內使用map
每次點選展開load方法都會返回{tree,treeNode,resolve}, 定義好map後在每一次執行load方法呼叫介面成功返回資料後將load返回的引數{tree,treeNode,resolve}儲存到map中去,用於後續操作中使用
load(tree, treeNode, resolve) { if (treeNode) { // 這是我的方法和介面不必照搬只需要將this.maps.set()這一句放到相應位置即可 selectBom({ code: tree.code, ifMba: this.ifMba, }).then((res) => { if (res.code == 200) { resolve(res.data); this.maps.set(tree.code, { tree, treeNode, resolve }); // 上面這一句是將你每一次展開的節點存到你剛剛在data內定義的map內,其他的不重要 // tree.code是唯一值 } }); } },
第三步:查詢map中對應資料
已經將每次展開load返回的{tree,treeNode,resolve}儲存到map中後,我們現在就需要取出來再傳給load方法了,呼叫refreshLoadTree方法時需要給它傳一個你所操作節點父節點ID,他會通過這個ID去map中檢索出相對應的資料然後再呼叫load方法傳給它以達到區域性更新的目的
refreshLoadTree(pId) { // 根據更改節點的父ID取出相應資料 const { tree, treeNode, resolve } = this.maps.get(pId); this.$set( // 不要忘記在你的table上寫ref this.$refs.LoadTable.store.states.lazyTreeNodeMap, pId, [] ); if (tree) { // 將取出對應資料再傳給load方法 this.load(tree, treeNode, resolve); } },
第四步:呼叫 refreshLoadTree方法
只需要在你修改或刪除等操作介面返回成功時呼叫並傳一個操作節點父ID即可實現區域性資料更新
//最後只需要在你做修改刪除或者其他操作的地方呼叫即可 //括號內傳操作節點的父節點(如果自己拿不到可以在介面成功時讓後端返回) this.refreshLoadTree(res.data.code);
這是基礎版本,因為本人專案原因會再次之上改動許多並未附上全部(僅作為記錄)
到此這篇關於vue+element tree懶載入更新資料的文章就介紹到這了,更多相關vue element tree懶載入內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45