级联下拉框Json数据构建

2 篇文章 0 订阅
2 篇文章 0 订阅

制作地区的级联下拉框

获取后端数据

this.axios.get('后台访问地址')
				.then(res => {
    				console.log(res.data);
					对后台传来数据进行处理
				}

首先我这边请求接收到的数据:

在这里插入图片描述

开始处理后台数据

//获取到所有商家的地区
for (var i = 0; i < res.data.data.length; i++) {
	this.merchantsCityData.push(res.data.data[i].merchants_city);
}

数据:

在这里插入图片描述

获取到级联必要的两个数组

//获取地区相关的数据
for (var i = 0; i < this.merchantsCityData.length; i++) {
	var chainsDate = [];
	chainsDate.push(this.merchantsCityData[i].split('-'));		//拆分每一条数据为省,市,区的小数组
	for (var j = 0; j < chainsDate.length; j++) {
		this.province.push(chainsDate[0][0]);					//获取每条数据中的省份
		this.merchantsCity.push(chainsDate[0]);					//将每个小数组存放到一个数组中
	}
}
this.duplicate(this.province);				//手写一个去重的方法对省份去重

开始操作数组使其形成我们所需的Json数据样式

/**
数据样式options:[{
	value:'',
	label:'',
	children:[{
		value:'',
		label:'',
		children:[{
			value:'',
			label:''
		}]
	}]
}]
*/
for (var j = 0; j < this.province.length; j++) {
	var a = {
		value: '',
		label: '',
		children: []
	}; 
	//获取一级目录,即省份
	a.value=this.province[j];
	a.label=this.province[j];
	//创建二级目录所需的地区
	var shuzu = [];
	//创建二级目录所需的数据
	var shuzu2 = [];
	//筛选二级目录
	for (var i = 0; i < this.merchantsCity.length; i++) {
		if (this.merchantsCity[i][0] == this.province[j]) {
			shuzu.push(this.merchantsCity[i]);
			shuzu2.push(this.merchantsCity[i][1]);
		}
	}
	this.duplicate(shuzu2);
	//循环遍历二级目录
	for(var m=0;m<shuzu2.length;m++){
		var b = {
			value: '',
			label: '',
			children: []
		};
		//获取二级目录,即市
		b.value=shuzu2[m];
		b.label=shuzu2[m];
		//创建三级目录所需的数据
		var shuzu3 = [];
		for(var k=0;k<shuzu.length;k++){
			if(shuzu[k][1]==shuzu2[m]){
				shuzu3.push(shuzu[k][2]);
			}
		}
		this.duplicate(shuzu3);
		for(var n=0;n<shuzu3.length;n++){
			var c = {
				value: '',
				label: '',
			}
			//获取三级目录,即区
			c.value=shuzu3[n];
			c.label=shuzu3[n];
			//三级目录添加到二级目录
			b.children.push(c);
		}
		//二级目录添加到一级目录
		a.children.push(b);
	}
	//将一级目录存放到级联下拉框中
	this.options.push(a);
}

整体代码

<el-cascader v-model="merchantsCityValue" placeholder="请选择地区" :options="options" ></el-cascader>
export default {
		name: "bussinessCensus",
		data() {
			return {
				merchantsCityData: [],			//所有商家地区的数组
				merchantsCity: [],				//分割成省,区,县的商家地区数组
				province: [],					//所有商家所在地区的省份
				data:[],						//获取后台传送的数据
				merchantsCityValue: [],			//获取地区下拉框中的值
				options: [],					//地区下拉框级联数组样式
			}
		},
		mounted() {
			this.axios.get('后台链接')
				.then(res => {
					if (res.data.code == 200) {
						console.time('globel');
						//获取后台传送来的数据
						for (var i = 0; i < res.data.data.length; i++) {
							this.merchantsCityData.push(res.data.data[i].merchants_city);
						}
						
						//获取地区相关的数据
						for (var i = 0; i < this.merchantsCityData.length; i++) {
							var chainsDate = [];
							chainsDate.push(this.merchantsCityData[i].split('-'));
							for (var j = 0; j < chainsDate.length; j++) {
								this.province.push(chainsDate[0][0]);
								this.merchantsCity.push(chainsDate[0]);
							}
						}
						this.duplicate(this.province);
						
						/*
						获取到省份数组(province)和所有由省、区、县组成小数组构成一个大数组(merchantsCity)
						使用autoSelect方法可以获取级联下拉框所需的数据
						*/
						this.autoSelect();
						for (var j = 0; j < this.province.length; j++) {
							var a = {
								value: '',
								label: '',
								children: []
							}; 
							//获取一级目录
							a.value=this.province[j];
							a.label=this.province[j];
							//创建二级目录所需的地区
							var shuzu = [];
							//创建二级目录所需的数据
							var shuzu2 = [];
					
							//筛选二级目录
							for (var i = 0; i < this.merchantsCity.length; i++) {
								if (this.merchantsCity[i][0] == this.province[j]) {
									shuzu.push(this.merchantsCity[i]);
									shuzu2.push(this.merchantsCity[i][1]);
								}
							}
							this.duplicate(shuzu2);
					
							//循环遍历二级目录
							for(var m=0;m<shuzu2.length;m++){
								var b = {
									value: '',
									label: '',
									children: []
								};
								//获取二级目录
								b.value=shuzu2[m];
								b.label=shuzu2[m];
								//创建三级目录所需的数据
								var shuzu3 = [];
								for(var k=0;k<shuzu.length;k++){
									if(shuzu[k][1]==shuzu2[m]){
									shuzu3.push(shuzu[k][2]);
									}
								}
								this.duplicate(shuzu3);
								for(var n=0;n<shuzu3.length;n++){
									var c = {
											value: '',
											label: '',
										}
										//获取三级目录
										c.value=shuzu3[n];
										c.label=shuzu3[n];
									//三级目录添加到二级目录
									b.children.push(c);
								}
							//二级目录添加到一级目录
							a.children.push(b);
							}
						//将一级目录存放到级联下拉框中
						this.options.push(a);
						}
						console.timeEnd('globel');
					}
				});
		},
		methods: {},
		watch: {},
		created() {}
	}

Axions知识点小补充

this.axios.get('后台访问地址',
	(可选项){params:{
				name:"张三",
      		  	age:18
			}
	}).then(res => {
		对后台传来数据进行处理
	}
跟着访问地址后面的是可选项params,可在其中添加需要传到后台的参数

例子:

this.axios.get('user'{
	params:{
		name:"张三",
        age:18
	}
		}).then(res => {
		对后台传来数据进行处理
	}
当前端发送请求时链接就会变成这个:user?name=张三&age=18
age:18
			}
	}).then(res => {
		对后台传来数据进行处理
	}
跟着访问地址后面的是可选项params,可在其中添加需要传到后台的参数

例子:

this.axios.get('user'{
	params:{
		name:"张三",
        age:18
	}
		}).then(res => {
		对后台传来数据进行处理
	}
当前端发送请求时链接就会变成这个:user?name=张三&age=18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值