最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Element中的Cascader(级联列表)动态加载省市\区数据的方法

来源:动视网 责编:小采 时间:2020-11-27 21:59:43
文档

Element中的Cascader(级联列表)动态加载省市\区数据的方法

Element中的Cascader(级联列表)动态加载省\市\区数据的方法:element中的cascader其实是有动态加载次级选项的方法。 方法的原理是利用址(引用)传递,动态修改:options。 var c={name: 'bob'} var d=c d.name = 'tom' console.log(c) // {name: tom} http://element-cn.e
推荐度:
导读Element中的Cascader(级联列表)动态加载省\市\区数据的方法:element中的cascader其实是有动态加载次级选项的方法。 方法的原理是利用址(引用)传递,动态修改:options。 var c={name: 'bob'} var d=c d.name = 'tom' console.log(c) // {name: tom} http://element-cn.e


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

方法的原理是利用址(引用)传递,动态修改: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

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

怎么找了?

当然只能递归了。

简化一下大致思路:

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 // 动态加载赋值
 })
}

整个页面代码大致就是:

<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: '中华人民共和国', 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
 })
 },
 }
}
</script>

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

文档

Element中的Cascader(级联列表)动态加载省市\区数据的方法

Element中的Cascader(级联列表)动态加载省\市\区数据的方法:element中的cascader其实是有动态加载次级选项的方法。 方法的原理是利用址(引用)传递,动态修改:options。 var c={name: 'bob'} var d=c d.name = 'tom' console.log(c) // {name: tom} http://element-cn.e
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top