el-tree後續需求之解決(更新節點數據、默認選中節點)

一 背景

       el-tree的數據來源,通過後臺獲取,之前考慮由於刷新數據造成頁面閃動的問題,處理方法爲不實時刷新el-tree的數據(只考慮到了添加)。

        添加一個treeNode時,成功後,調用後臺的getTree重新獲取最新數據newData,遍歷找到新增的目標對象,將其獲取作爲當前選中節點的子Node。這樣沒有刷新整棵樹,保證頁面不會晃動。

二 引發問題:          

這樣的處理方法,並沒有考慮到修改樹節點名稱的情況,這就出現了bug,提示節點名稱修改成功後,tree上該節點名稱一動不動,如初。而且只要不切換頁面,el-tree組件上的值永遠都是原值。

解決方法:

(1)可能一下又想到上面的方法,仍舊遍歷tree找到目標節點,然後再將改動的內容一一對比,將該目標節點的屬性更新即可。不過,這樣避免不了兩次遍歷,實現步驟:

       a.首先要拿到更新成功時該節點的屬性;(如果直接從更新表單拿到的表單數據並不是標準的節點格式,並不好比對;所以只能通過調用後臺接口獲取到新的tree數據

       b.第一次遍歷:遍歷資源樹,找到原目標節點;(注意:這裏如果修改了nodeName,要更麻煩一點,就需要節點ID定位了

       c.第二次遍歷:將目標節點屬性與更新後的節點比對,並修改;

可以看出尤其極其麻煩。。。。

(2)於是,這種情況下,何必直接調用更新整個el-tree,重新渲染。於是,嘗試後,果然好用,而且並沒有出現閃頓現象。這裏使用了全局的事件總線方法。如下圖,更改觸發的組件爲組件二,且和資源樹所在組件無直接關係。另外,在資源樹上選中節點時,通過路由push顯示右邊的界面。所以即無父子關係也無兄弟關係,故採用了全局事件總線。修改成功後,通知el-tree調用自身更新數據方法,實時顯示。相比方法(1),只有第一個步驟,不過是調用el-tree的刷新數據方法。

三 新增默認選中節點展示
       由於每次進入顯示el-tree界面時,未選擇節點時,右側爲空白,用戶體驗不良好。於是乎,給el-tree增加一個默認選中功能。查看elment-ui,default-checked-keys可以設置,但這隻針對於有check框的tree .......T T,於是一番百度發現。嗯,還是可以實現的。那就是調用原生方法setCurrentKey(),使用此方法必須設置 node-key 屬性。

       如上圖所示:將el-tree的node-key設置爲節點name,實際中不會有同名事件,所以沒關係。下面兩個getCurrentNode()和getNode()方法主要是爲左鍵點擊事件的參數做準備。即默認選中節點時,程序觸發左鍵事件,以顯示右側界面~

這樣,問題又來了,上面只解決了第一次進入頁面時的默認選中節點,但當用戶選中某個節點時,修改成功或者刷新頁面時,選擇的Node爲設置第一次的節點,不符合常理

解決辦法:每次左鍵事件觸發的同時,記錄當前操作的節點,刷新資源樹之前先去讀取是否有歷史選中狀態,以分情況顯示默認選中節點即可。

四 遺留問題

由於後續需要定時獲取資源樹狀態,頻繁調用接口刷新資源樹的情況下,會不會造成頁面晃動不穩定?有風險待後續驗證。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章