我們通過setTimeout 來模擬加載數據, 通過直接resolve來模擬數據加載失敗。 代碼如下, 發現加載完後再次點擊是無法加載數據的。
代碼
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
子級數據不存在, node 一直處在loading狀態
正常狀態是這樣的
將子級數據的value修改後, 發現上一級的node一直是loading狀態,如圖。
在源碼裏面,loading 圖標是通過loading變量控制的,但是通過devtool發現這個變量已經是false了, 卻還是顯示loading
處理辦法
判斷子級數據是否存在對應的值, 不存在就將 級聯選擇器的值清空。 這樣級聯選擇器就會重新走lazyLoad、只加載第一級的數據了。