uniapp三级地区城市联动,uni-data-picker

从后端返回给前端地区的数据

定义一个hooks,useRegion

export function useRegion() {
  const REGION_TREE = "region_tree";

  const getRegionTree = () => {
    return new Promise<[]>((resolve, reject) => {
      // 判断缓存中是否存在
       //这里要自己写getStorage,可以用vuex,pinna
      const data = getStorage(REGION_TREE,null);
      // 从服务端获取全部地区数据
      if (data) {
        resolve(JSON.parse(data));
      } else {
        getSysRegionTree()
          .then(response => {
            //这里要自己写setStorage
            setStorage(REGION_TREE, JSON.stringify(response.data));
            resolve(response.data);
          })
          .catch(error => {
            reject(error);
          });
      }
    });
  };



  return  {
      getRegionTree,
 
  }
}


export default useRegion;

然后在对应的地方,比如说是更新收货地址

//使用uni-data-picker,需要去uni-ui官网查看教程
<uni-forms-item label="地区" name="region">
	<uni-data-picker 
        // 这个map是映射,就是把label映射成text字段
	    :map="{text:'label',value:'value'}	"
	    :localdata="localData"
	    placeholder="请选择居住地址"
	    popup-title="请选择城市"
	    v-model="formData.region"
	    @change="handleChangeRegion"
	    :border="false"
	>
    </uni-data-picker>
</uni-forms-item>
import useRegion  from "@/hooks/useRegion";
const {getRegionTree }=useRegion();


const formData=reactive({
	region: [],
});

onLoad(()=>{
	getTreeData();
});


const localData=ref([]);
// 获取地区数据
const getTreeData=()=> {
	isLoading.value = true;
	getRegionTree()
		.then(regions => {
			// 格式化级联选择器数据
			localData.value = getOptions(regions);
		})
		.finally(() => (isLoading.value = false));
};

/**
 * 格式化级联选择器数据
 * @param {*} regions 地区数据
 */
const getOptions=(regions)=> {
	const options = [];
	for (const index in regions) {
		const item = regions[index];
		const children = item.children;
		const optionItem = {
			value: item.id,
			label: item.name
		};
		if (children) {
			optionItem.children = getOptions(children);
		}
		options.push(optionItem);
	}
	return options;
};
//当uni-data-picker发生改变的时候
const handleChangeRegion=(e)=>{
	formData.region=e.detail.value
	console.log("formData.region",formData.region)
};

//以下代码是假如获取到了一个人的地址信息,然后格式化一下,然后回显到页面上
// 生成默认的表单数据
const createFormData=(detail)=> {
	formData.region = createRegion(detail);
};

const createRegion=(detail)=> {
	return [
		{
			label: detail.provinceName,
			value: detail.provinceId
		},
		{
			label: detail.cityName,
			value: detail.cityId
		},
		{
			label: detail.regionName,
			value: detail.regionId
		}
	];
};


上面console.log输出的是

在提交的时候,如果需要省id,城市id,地域id就直接

formData.provinceId = formData.region[0].value;
formData.cityId = formData.region[1].value;
formData.regionId = formData.region[2].value;

最后成果就是

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很高兴为您解答这个问题。以下是一个简单的uni-data-picker三级联动省市区的代码示例: ``` <template> <div> <picker :value="selected" @change="onChange"> <picker-column :values="provinces" /> <picker-column :values="cities" /> <picker-column :values="districts" /> </picker> </div> </template> <script> export default { data() { return { provinces: ['北京市', '上海市', '广东省', '江苏省'], cities: { '北京市': ['北京市'], '上海市': ['上海市'], '广东省': ['广州市', '深圳市', '珠海市'], '江苏省': ['南京市', '苏州市', '无锡市'] }, districts: { '北京市': { '北京市': ['东城区', '西城区', '朝阳区'] }, '上海市': { '上海市': ['黄浦区', '徐汇区', '长宁区'] }, '广州市': { '广州市': ['天河区', '海珠区', '荔湾区'] }, '深圳市': { '深圳市': ['福田区', '罗湖区', '南山区'] }, '珠海市': { '珠海市': ['香洲区', '斗门区', '金湾区'] }, '南京市': { '南京市': ['玄武区', '秦淮区', '建邺区'] }, '苏州市': { '苏州市': ['姑苏区', '相城区', '吴中区'] }, '无锡市': { '无锡市': ['崇安区', '南长区', '北塘区'] } }, selected: ['广东省', '深圳市', '福田区'] } }, methods: { onChange(picker, value) { const [province, city, district] = value this.selected = value console.log(`选择了 ${province} - ${city} - ${district}`) } } } </script> ``` 希望这个代码示例能够帮助您实现uni-data-picker三级联动省市区。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值