省市区 - 接口加载数据

该代码示例展示了如何在Vue.js中使用ElementUI的Cascader组件通过lazyLoad属性动态加载省市区数据。当层级改变时,它会调用`getArea`API获取相应级别的区域数据,并设置节点的children。同时,提供了处理默认地址值的逻辑。
摘要由CSDN通过智能技术生成

解析:https://element.eleme.io/#/zh-CN/component/cascader
通过lazyload来设置加载数据源的方法
在这里插入图片描述
HTML

<el-cascader v-model="selectedOptions" class="input-width-250" size="small" :options="options" @change="handleChooseAddressChange" :props="props"/>

JS
一、
在这里插入图片描述

import { getArea } from '@/api/shop';
let initProvinceCode = '';

二、
在这里插入图片描述

		options: '',
		selectedOptions: ['广东省', '广州市', '荔湾区'], // 选择的地址默认
		// 省市区
		props: {
			lazy: true,
			lazyLoad(node, resolve) {
				let that = this;
				const {
					level,
					label
				} = node;

				setTimeout(() => {
					if (level === 1) {
						// 加载市
						node.children = []; //防止加载重复数据
						this.provinceName = label;
						let data = {
							provinceName: label,
							type: 2
						};
						getArea(data).then(res => {
							resolve(res.data);
						});
					} else if (level === 2) {
						// 加载区
						node.children = [];
						let data = {
							provinceName: this.provinceName || initProvinceCode,
							code: label,
							type: 3
						};

						getArea(data).then(res => {
							res.data.forEach(el => {
								el.leaf = level >= 2; //取消最后一级箭头
							});
							resolve(res.data);
						});
					}
				}, 100);
			}
		}

三、
在这里插入图片描述

	// 地址选择默认值处理
	if (this.form.provinceCode) {
		console.log('走 4', provinceCode + cityCode + areaCode)
		this.getProvinceFunc(provinceCode, cityCode, areaCode);
	}

四、
在这里插入图片描述

		// 初始默认赋值 - 省市区
		getProvinceFunc(lable, cityCode, areaCode) {
			// 请求省
			let data = {
				type: 1
			};
			let provinceList = '';
			getArea(data).then(res => {
				provinceList = res.data;
				// 请求市
				let data = {
					provinceName: lable,
					type: 2
				};
				let provinceIndex = '';
				provinceList.forEach((el, index) => {
					if (el.label === lable) {
						provinceIndex = index;
					}
				});
				getArea(data).then(res => {
					provinceList[provinceIndex].children = res.data;
					let data = {
						provinceName: lable,
						code: cityCode,
						type: 3
					};
					let cityIndex = '';
					provinceList[provinceIndex].children.forEach((el, index) => {
						if (el.label === cityCode) {
							cityIndex = index;
						}
					});
					// 请求区
					getArea(data).then(res => {
						res.data.forEach(el => {
							el.leaf = true; //回显必填
						});

						provinceList[provinceIndex].children[cityIndex].children = res
							.data; //某个市children
						this.options = provinceList;
						// 设置值
						initProvinceCode = lable; //设置默认的省
						this.selectedOptions = [lable, cityCode, areaCode];
					});
				});
			});
		},

		handleChooseAddressChange(value) {
			console.log('value', value);
			this.form.provinceCode = value[0];
			this.form.cityCode = value[1];
			this.form.areaCode = value[2];
		}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Element Cascader 是一个支持级联选择的组件,可以通过动态加载接口实现省市区地区数据的选择。 首先,在项目中安装 Element UI 组件库,并在需要使用 Cascader 组件的页面进行引入。 然后,在组件内部定义一个名为 "options" 的数据,用于存储加载后的省市区地区数据。 接下来,通过调用接口获取省市区地区的数据,一般接口会返回一个包含省市区数据的数组。我们可以利用 axios 等网络请求库发送异步请求,在获取到数据后将其赋值给 "options" 数据接口获取到的数据一般都是树形结构,每个节点都包含着该节点的子节点。我们可以通过循环遍历这个树形结构,将每个节点转化为 Cascader 组件期望的格式,即 {label: '节点名称', value: '节点值', children: '子节点数组'}。然后将转化后的数据赋值给 "options" 数据,即可动态加载省市区地区数据。 最后,将 Cascader 组件渲染到页面上,并绑定 "options" 数据作为其属性传入,这样就可以实现动态加载接口省市区地区数据。 总之,使用 Element Cascader 组件动态加载接口省市区地区数据,需要安装 Element UI 组件库,定义 "options" 数据存储接口返回的数据,通过网络请求库发送接口请求获取数据,并将树形结构的数据转化为 Cascader 组件期望的格式,最后将数据传递给 Cascader 组件即可实现动态加载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值