动态

详情 返回 返回

element plus cascader lazyload 加載失敗後如何重新加載 - 动态 详情

我們通過setTimeout 來模擬加載數據, 通過直接resolve來模擬數據加載失敗。 代碼如下, 發現加載完後再次點擊是無法加載數據的。
image.png

代碼

https://element-plus.run/#eyJBcHAudnVlIjoiPHRlbXBsYXRlPlxuICA...

分析

從源碼裏面看是有一個變量來判斷他是否可以重新加載數據的。將 loaded 置為false後, 再次點擊是可以重新加載load數據的。

const handleExpand = () => {
      const { node } = props
      // do not exclude leaf node because the menus expanded might have to reset
      if (!expandable.value || node.loading) return
      node.loaded ? doExpand() : doLoad()
    }

https://github.com/element-plus/element-plus/blob/a1f03539a6c595e094eefa82b71331e9a729c1ab/packages/components/cascader-panel/src/node.vue#L151

image.png

子級數據不存在, node 一直處在loading狀態

正常狀態是這樣的
image.png

將子級數據的value修改後, 發現上一級的node一直是loading狀態,如圖。
在源碼裏面,loading 圖標是通過loading變量控制的,但是通過devtool發現這個變量已經是false了, 卻還是顯示loading
image.png
image.png

處理辦法

判斷子級數據是否存在對應的值, 不存在就將 級聯選擇器的值清空。 這樣級聯選擇器就會重新走lazyLoad、只加載第一級的數據了。
image.png

Add a new 评论

Some HTML is okay.