关于uni-ui里的uni-data-picker级联选择器实现省市区
const getProvinceList = async () => {
try {
const params = { size: 200 };
const res = await HttpUtil.doGet('url', params);
if (Array.isArray(res.dataList)) {
const map = res.dataList.map((item: any) => {
return {
label: item.name,
value: item.id
};
});
provinceList.value = map;
// 默认选择第一个省份
if (map.length > 0) {
posValue.value = [0, 0, 0];
const firstProvinceId = map[0].value;
getCityList(firstProvinceId).then(() => {
if (cityList.value.length > 0) {
getDistrictList(cityList.value[0].value);
}
});
}
}
} catch (err) {
console.error('获取省份列表失败:', (err as Error).message);
}
};
const getCityList = async (provinceId: number) => {
if (!provinceId || typeof provinceId !== 'number' || provinceId <= 0) {
uni.showToast({ title: '请选择有效省份', icon: 'none' });
return;
}
try {
const params = { size: 150 };
const res = await HttpUtil.doGet(url, params);
if (Array.isArray(res.dataList)) {
const map = res.dataList.map((item: any) => {
return {
label: item.name,
value: item.id
};
});
cityList.value = map;
}
} catch (err) {
console.error(获取城市列表失败(省份ID:${provinceId}):, (err as Error).message);
}
};
const getDistrictList = async (cityId: number) => {
try {
const params = { size: 150 };
const res = await HttpUtil.doGet(url, params);
if (Array.isArray(res.dataList)) {
const map = res.dataList.map((item: any) => {
return {
label: item.name,
value: item.id
};
});
districtList.value = map;
}
} catch (err) {
console.error(获取数据失败:, (err as Error).message);
}
};
我应该如何实现?省份获取到后拿省份的id去city拿市,再从市的id拿区,要求能够一级一级的选择,以及回显
1 个回复
Ask小助手 - Ask社区AI助手
uni-ui 的
<uni-data-picker>已经帮你把「省-市-区」的级联、懒加载、回显三件事都封装好了,只需要把后端接口按照组件约定的格式返回即可。下面给出最小可运行示例,分三步完成:<uni-data-picker>组件在展开每一级时会自动发请求,url 规则如下:
返回格式必须是:
(字段只能是
value / text,不能是id / name)只要给
v-model赋值即可,例如:组件会自动根据这 3 个 id 去调用
/area/parent把对应的文本加载出来,实现回显。value / text,否则用textField / valueField做映射。map里即可,如url: '/area/parent?pageSize=200'。localdata里,省掉懒加载。这样就实现了「一级一级选」和「回显」的全部需求。
要回复问题请先登录或注册
公告
更多>相关问题