900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > cascader 动态加载 回显_Element中的Cascader(级联列表)动态加载省\市\区数据的方法...

cascader 动态加载 回显_Element中的Cascader(级联列表)动态加载省\市\区数据的方法...

时间:2019-11-29 23:31:58

相关推荐

cascader 动态加载 回显_Element中的Cascader(级联列表)动态加载省\市\区数据的方法...

element中的cascader其实是有动态加载次级选项的方法。

方法的原理是利用址(引用)传递,动态修改:options。

var c={name: 'bob'}

var d=c

d.name = 'tom'

console.log(c)

// {name: "tom"}

其中找到究竟需要在那层添加数据就变成一个很麻烦的问题。

怎么找了?

当然只能递归了。

简化一下大致思路:

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']

那么我们就需要通过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)

编写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数组第一个元素以外的全部元素。

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

regionOptionInUI.children = regionChildrenTransfomed // 动态加载赋值

})

}

整个页面代码大致就是:

export default {

name: 'Test',

data() {

return {

selectedRegion: [],

regionHiera: [

{ label: 'Malaysia', value: '136', children: [] },

{ label: 'Indonesia', value: '106', children: [] },

{ label: '中华人民共和国', 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 //后台返回数据

regionOptionInUI.children = regionChildrenTransfomed

})

},

}

}

整体思路还是找到点击后的region,然后动态赋值给children。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。