1. 程式人生 > 實用技巧 >elementui的Cascader 級聯選擇器,在懶載入的時候資料無法回顯的解決方案

elementui的Cascader 級聯選擇器,在懶載入的時候資料無法回顯的解決方案

一:實現思路

定位原因:懶載入的級聯下拉框無法回顯是因為,只綁定了model的值,沒有options的資料支撐的話,獲取不到節點的內容導致;

方案:拿到選中的項的時候,用這些值去遞迴迴圈獲取相應的節點的一些屬性,賦值給options,然後注意最後一個節點的leaf屬性一定要有且是true了才可以回顯;

二:綁定了options還是沒有回顯的可能原因

2.1 賦值options的格式不對;

2.2 賦值的option裡面最後一項沒有加上 leaf:true,導致外掛以為還有下級所以無法回顯;

2.3 賦值的id資料型別和實際不一致,如果model裡面的是字串,option裡面的id也要轉換成字串;

三:實現demo

// test.vue
<template>
    <!-- 測試懶載入 -->
    <el-cascader :props="test_props" :options="test_options" v-model="test_model"></el-cascader>
</template>

<script>
     let id2 = 0;

    export default {
        data(){
            return {
                test_options: [ 
//回顯值得關鍵必須要把需要回顯的都寫到options裡面,且最後一項要加上leaf:true,表示無下級了才可以回顯;這裡寫死,實際要根絕介面返回的需要回顯的資料,來遞迴迴圈到結果,賦值給這裡; { value: '選項1', label: '選項1', children: [{ value: '選項3', label: '選項3', leaf: true }], }, { value: '選項2', label: '選項2', }, ], test_model: [
'選項1', '選項3'],//模擬後臺取到的預設值,這裡是單選 test_props: { lazy: true, lazyLoad(node, resolve) { const { level } = node; setTimeout(() => { const nodes = Array.from({ length: 2 }) .map((item) => { ++id2 return { value: `選項${id2}`, label: `選項${id2}`, leaf: level >= 1, } }); // 通過呼叫resolve將子節點資料返回,通知元件資料載入完成 resolve(nodes); }, 1000);
       } } } }
</script>