el-cascader多選+懶加載+數(shù)據(jù)回顯

背景:
記錄el-cascader多選+懶加載+數(shù)據(jù)回顯的實(shí)際案例。
注意:
1.回顯數(shù)據(jù)的時(shí)候除了給v-model綁定的屬性賦值以外姿现,還要提供一個(gè)包含需要渲染的級(jí)聯(lián)數(shù)據(jù)的options模板竿痰。
2.resolve(nodes) 返回的nodes為下一級(jí)要渲染的list列表數(shù)據(jù)苟弛,如果是回顯已提供了options渲染模板但是不完整,則需要在后面懶加載的時(shí)候?qū)⒎祷氐膌ist數(shù)據(jù)和已存在的節(jié)點(diǎn)數(shù)據(jù)做對(duì)比,僅保留options中不存在的節(jié)點(diǎn)數(shù)據(jù)再把過濾后的節(jié)點(diǎn)resolve(nodes)潦刃。

<template>
    <div>
        <!--template模板中引用-->
        <el-cascader style="width: 100%" :props="cascaderProps" :options="formData.options" v-model="formData.vpc_info" @change="cascaderChange" v-if="cascaderVisible">
    </div>
</template>

<script>
    export default {
        data() {
            formData: {
                //回顯數(shù)據(jù)的模板
                options: [{
                    "children": [{
                        "children": [{
                            "label": "infra-test-01",
                            "value": "infra-test-01"
                        }],
                        "label": "usne",
                        "value": "usne"
                    }],
                    "label": "AZURE-CLOUD",
                    "value": "3"
                }],
                //需要回顯的三級(jí)數(shù)據(jù)
                vpc_info: [
                    ['3', 'usne', 'infra-test-01']
                ],
            },
            cascaderVisible: true,
            cascaderProps: {
                lazy: true,
                multiple: true,
                lazyLoad: (node, resolve) => {
                    const {
                        level
                    } = node;
                    console.log('lazyLoadnode', node)
                    if(level === 2) { //點(diǎn)擊城市l(wèi)evel=2加載vpc列表
                        this.getCloudInfo(node, resolve, node.parent.value, node.value)
                    } else if(level === 1) { //點(diǎn)擊云服務(wù)level=1加載城市列表
                        this.getCloudInfo(node, resolve, node.value)
                    } else { //初始化level=0加載云服務(wù)列表
                        this.getCloudInfo(node, resolve)
                    }
                }
            },
        },
        watch: {
            // 監(jiān)聽環(huán)境變化
            'formData.cd_work_env': {
                handler(cd_work_env, value) {
                    console.log('cd_work_env改變---', cd_work_env)
                    if(cd_work_env && cd_work_env !== value) {
                        //切換環(huán)境重置云服務(wù)列表 通過v-if觸發(fā)三級(jí)聯(lián)動(dòng)自動(dòng)加載
                        this.formData.vpc_info = []
                        this.cascaderVisible = false
                        this.$nextTick(() => {
                            this.cascaderVisible = true
                        })
                    }
                }
            },
        },
        methods: {
            // 懶加載獲取三級(jí)聯(lián)動(dòng)數(shù)據(jù)
            getCloudInfo(node, resolve, cloudId = '', areaId = '') {
                if(!this.formData.cd_work_env) {
                    return false;
                }
                _fetch({
                    url: '/deploy-resource-management/mixCloud/getCloudInfoBySytemId',
                    type: 'post',
                    data: {
                        system_id: this.formData.cd_work_system,
                        env: this.formData.cd_work_env,
                        cloud_type: cloudId,
                        area: areaId,
                    }
                }).then(res => {
                    if(res.data.code === 200) {
                        //將當(dāng)前節(jié)點(diǎn)已有的子節(jié)點(diǎn)和重新請(qǐng)求的node節(jié)點(diǎn)對(duì)比侮措,如已存在則移除該節(jié)點(diǎn)再resolve
                        if(res.data.body.type && res.data.body.type.length) {
                            let nodes = res.data.body.type.map(item => {
                                return { ...item,
                                    leaf: node.level >= 2
                                }
                            })
                            if(node.hasChildren && node.children.length) {
                                let list = []
                                node.children.forEach(item => {
                                    let flag = true
                                    nodes.forEach(subItem => {
                                        if(item.value === subItem.value) {
                                            flag = false
                                        }
                                    })
                                    if(flag) {
                                        list.push(subItem)
                                    }
                                })
                                resolve(list);
                            } else {
                                resolve(nodes);
                            }
                        } else {
                            resolve([]);
                        }
                    } else {
                        _message(this.$t("localization.common.error"), res.data.message, "error", this)
                    }
                }).catch(err => {
                    console.log(err)
                });
            },
            cascaderChange(value) {
                console.log(value)
            },
        }
    }
</script>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市乖杠,隨后出現(xiàn)的幾起案子萝毛,更是在濱河造成了極大的恐慌,老刑警劉巖滑黔,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件笆包,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡略荡,警方通過查閱死者的電腦和手機(jī)庵佣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汛兜,“玉大人巴粪,你說我怎么就攤上這事≈嗝” “怎么了肛根?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)漏策。 經(jīng)常有香客問我派哲,道長(zhǎng),這世上最難降的妖魔是什么掺喻? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任芭届,我火速辦了婚禮,結(jié)果婚禮上感耙,老公的妹妹穿的比我還像新娘褂乍。我一直安慰自己,他們只是感情好即硼,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布逃片。 她就那樣靜靜地躺著,像睡著了一般只酥。 火紅的嫁衣襯著肌膚如雪褥实。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天层皱,我揣著相機(jī)與錄音性锭,去河邊找鬼。 笑死叫胖,一個(gè)胖子當(dāng)著我的面吹牛草冈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼怎棱,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼哩俭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拳恋,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤凡资,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后谬运,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體隙赁,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年梆暖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了伞访。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡轰驳,死狀恐怖厚掷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情级解,我是刑警寧澤冒黑,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站勤哗,受9級(jí)特大地震影響抡爹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜俺陋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一豁延、第九天 我趴在偏房一處隱蔽的房頂上張望昙篙。 院中可真熱鬧腊状,春花似錦、人聲如沸苔可。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽焚辅。三九已至映屋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間同蜻,已是汗流浹背棚点。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留湾蔓,地道東北人瘫析。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親贬循。 傳聞我的和親對(duì)象是個(gè)殘疾皇子咸包,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容

  • 初次使用級(jí)聯(lián)選擇器遇到的一些小問題(適用新手或者跟我一樣容易迷糊的銀) 1.輸入后輸入框無選定值顯示 props屬...
    卡比基閱讀 4,602評(píng)論 0 0
  • 1、what?在使用Cascader 級(jí)聯(lián)選擇器中的el-cascader組件進(jìn)行級(jí)聯(lián)效果實(shí)現(xiàn)的時(shí)候杖虾,想要實(shí)現(xiàn)級(jí)聯(lián)...
    逸笛閱讀 1,038評(píng)論 0 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理烂瘫,服務(wù)發(fā)現(xiàn),斷路器奇适,智...
    卡卡羅2017閱讀 134,711評(píng)論 18 139
  • Select 選擇器 當(dāng)選項(xiàng)過多時(shí)坟比,使用下拉菜單展示并選擇內(nèi)容∪峦基礎(chǔ)用法適用廣泛的基礎(chǔ)單選温算。v-model的值為當(dāng)...
    遼A丶孫悟空閱讀 8,343評(píng)論 0 12
  • 1.說說對(duì)雙向綁定的理解 1.1、雙向綁定的原理是什么 我們都知道Vue是數(shù)據(jù)雙向綁定的框架间影,雙向綁定由三個(gè)重要部...
    GuessYe閱讀 472評(píng)論 0 0