uni-app 希望官方能出一个城市联动的插件

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app 希望官方能出一个城市联动的插件

官方之前是有mpvueCityPicker.vue这么个组件的,不知道怎么现在没有了。

image

3 回复

谢谢!

作为IT专家,理解你对uni-app城市联动插件的需求。虽然官方可能尚未直接提供此类插件,但我们可以通过组合现有的组件和API来实现城市联动的功能。以下是一个简单的示例代码,展示如何在uni-app中实现省、市、区/县的联动选择。

首先,你需要有一个包含中国所有省、市、区/县数据的JSON文件。这里假设你已经有了这样的数据文件,命名为cityData.json

cityData.json 示例结构

[
    {
        "name": "北京市",
        "children": [
            {
                "name": "市辖区",
                "children": [
                    {"name": "东城区"},
                    {"name": "西城区"},
                    // 更多区县
                ]
            }
            // 更多市
        ]
    },
    // 更多省
]

页面代码(pages/city/city.vue

<template>
    <view>
        <picker mode="selector" :range="provinces" @change="onProvinceChange">
            <view class="picker">{{ selectedProvince }}</view>
        </picker>
        <picker mode="selector" :range="cities" :disabled="!hasCities" @change="onCityChange">
            <view class="picker">{{ selectedCity }}</view>
        </picker>
        <picker mode="selector" :range="districts" :disabled="!hasDistricts" @change="onDistrictChange">
            <view class="picker">{{ selectedDistrict }}</view>
        </picker>
    </view>
</template>

<script>
import cityData from '@/static/cityData.json';

export default {
    data() {
        return {
            provinces: [],
            cities: [],
            districts: [],
            selectedProvince: '',
            selectedCity: '',
            selectedDistrict: '',
            hasCities: false,
            hasDistricts: false
        };
    },
    onLoad() {
        this.provinces = cityData.map(p => p.name);
        this.selectedProvince = this.provinces[0];
        this.onProvinceChange(0);
    },
    methods: {
        onProvinceChange(e) {
            const province = cityData[e.detail.value];
            this.cities = province.children.map(c => c.name);
            this.hasCities = this.cities.length > 0;
            this.selectedCity = this.cities[0];
            this.onCityChange(0);
        },
        // 类似地实现onCityChange和onDistrictChange方法
        // ...
    }
};
</script>

<style>
.picker {
    padding: 10px;
    border: 1px solid #ccc;
    margin-bottom: 10px;
}
</style>

以上代码展示了如何使用picker组件实现省、市、区/县的联动选择。注意,这里为了简洁,onCityChangeonDistrictChange方法的实现被省略了,但它们应该遵循与onProvinceChange类似的逻辑。你需要根据cityData.json的结构来更新这些方法,确保它们能够正确地更新citiesdistricts数组,并设置默认选项。

回到顶部