Element中的Cascader(級(jí)聯(lián)列表)動(dòng)態(tài)加載省\市\(zhòng)區(qū)數(shù)據(jù)的方法
element中的cascader其實(shí)是有動(dòng)態(tài)加載次級(jí)選項(xiàng)的方法。
方法的原理是利用址(引用)傳遞,動(dòng)態(tài)修改:options
。
var c={name: 'bob'} var d=c d.name = 'tom' console.log(c) // {name: "tom"}
http://element-cn.eleme.io/#/zh-CN/component/cascader#dong-tai-jia-zai-ci-ji-xuan-xiang
其中找到究竟需要在那層添加數(shù)據(jù)就變成一個(gè)很麻煩的問(wèn)題。
怎么找了?
當(dāng)然只能遞歸了。
簡(jiǎn)化一下大致思路:
var a = [ { value: '2', children: [ { value: '2-1', children: [ { value: '2-1-1', children: [], }, ], }, { value: '2-2', children: [ { value: '2-2-1', children: [], }, { value: '2-2-2', children: [ { value: '2-2-2-1', children: [], }, ], }, ], }, ], }, ] var b = ['2','2-2','2-2-1']
那么我們就需要通過(guò)b
找到a
所在的位置。
a[0].children[1].children[0] { value: '2-2-1', children: [], },
然后再賦值:
a[0].children[1].children[0].children = [{value: '2-2-1-1',children: []}] console.log(a)
編寫(xiě)function:
findRegionOption(regionOptions, regionArr) { if (_.isEmpty(regionArr) || _.isEmpty(regionOptions)) { return null } let regionId = _.first(regionArr) let regionOption = _.find(regionOptions, regionOption => { return regionOption.value === regionId }) if (!regionOption) { return null } let tailRegionArr = _.tail(regionArr) // lodash的tail方法,獲取除了array數(shù)組第一個(gè)元素以外的全部元素。 if (_.isEmpty(tailRegionArr)) { return regionOption } return this.findRegionOption(regionOption.children, tailRegionArr) }
動(dòng)態(tài)加載數(shù)據(jù):
loadRegionChild(regionIdArr) { let regionOptions = this.regionHiera let regionOptionInUI = this.findRegionOption(regionOptions, regionIdArr) if ( !regionOptionInUI || !regionOptionInUI.children || regionOptionInUI.children.length > 0 ) { return null } let regionKey = _.last(regionIdArr) if (!regionKey) { return null } api .getRegionHiera(regionKey) .then(res => { let regionHiera = res.data regionOptionInUI.children = regionChildrenTransfomed // 動(dòng)態(tài)加載賦值 }) }
整個(gè)頁(yè)面代碼大致就是:
<template> <div> <el-cascader :options="regionHiera" v-model="selectedRegion" change-on-select/> </div> </template> <script> export default { name: 'Test', data() { return { selectedRegion: [], regionHiera: [ { label: 'Malaysia', value: '136', children: [] }, { label: 'Indonesia', value: '106', children: [] }, { label: '中華人民共和國(guó)', value: '100000', children: [] }, { label: 'United States', value: '244', children: [] }, ], } }, watch: { selectedRegion(nv) { this.loadRegionChild(nv) }, }, methods: { findRegionOption(regionOptions, regionArr) { if (_.isEmpty(regionArr) || _.isEmpty(regionOptions)) { return null } let regionId = _.first(regionArr) let regionOption = _.find(regionOptions, regionOption => { return regionOption.value === regionId }) if (!regionOption) { return null } let tailRegionArr = _.tail(regionArr) if (_.isEmpty(tailRegionArr)) { return regionOption } return this.findRegionOption(regionOption.children, tailRegionArr) }, loadRegionChild(regionIdArr) { let regionOptions = this.regionHiera let regionOptionInUI = this.findRegionOption(regionOptions, regionIdArr) if ( !regionOptionInUI || !regionOptionInUI.children || regionOptionInUI.children.length > 0 ) { return null } let regionKey = _.last(regionIdArr) if (!regionKey) { return null } api .getRegionHiera(regionKey) .then(res => { let regionHiera = res.data //后臺(tái)返回?cái)?shù)據(jù) regionOptionInUI.children = regionChildrenTransfomed }) }, } } </script>
整體思路還是找到點(diǎn)擊后的region,然后動(dòng)態(tài)賦值給children。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
淺談vue引用靜態(tài)資源需要注意的事項(xiàng)
今天小編就為大家分享一篇淺談vue引用靜態(tài)資源需要注意的事項(xiàng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09基于vue2.0動(dòng)態(tài)組件及render詳解
下面小編就為大家分享一篇基于vue2.0動(dòng)態(tài)組件及render詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03使用Webstorm調(diào)試Vue代碼詳細(xì)圖文教程
WebStorm是一款優(yōu)秀的前端開(kāi)發(fā)IDE,之前一直可以調(diào)試Vue項(xiàng)目,下面這篇文章主要給大家介紹了關(guān)于使用Webstorm調(diào)試Vue代碼的詳細(xì)圖文教程,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-05-05vue-music關(guān)于Player播放器組件詳解
這篇文章主要為大家詳細(xì)介紹了vue-music關(guān)于Player播放器組件的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11Vue實(shí)現(xiàn)簡(jiǎn)易計(jì)算器
這篇文章主要為大家詳細(xì)介紹了用Vue制作的簡(jiǎn)易計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02詳解Vue組件之間的數(shù)據(jù)通信實(shí)例
本篇文章主要介紹了詳解Vue組件之間的數(shù)據(jù)通信實(shí)例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06基于Element的組件改造的樹(shù)形選擇器(樹(shù)形下拉框)
這篇文章主要介紹了基于Element的組件改造的樹(shù)形選擇器,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02