uni-app picker-view 实现多列级联选择时滑动到边界停留在空白区域

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

uni-app picker-view 实现多列级联选择时滑动到边界停留在空白区域

4 回复

刚用官方demo试了下,没复现你的问题


官方例子都是固定死的数据,列的数据量都是相同的。用城市区的数据,看视频可以看出来是从数据量少切换到数据量多的时候容易出现。

解决了,靠人不如靠自己,文件放上来,有相同问题的可以看看。

在使用 uni-apppicker-view 组件实现多列级联选择时,如果滑动到边界时停留在空白区域,通常是因为数据源没有正确配置或者数据源为空。以下是一些可能的解决方案和注意事项:

1. 确保数据源正确

确保每一列的数据源都正确配置,并且没有空数据。如果某一列的数据源为空,滑动到边界时就会出现空白区域。

2. 动态更新数据源

在多列级联选择中,通常需要根据前一列的选择动态更新后一列的数据源。确保在用户选择某一列后,及时更新下一列的数据源。

3. 处理边界情况

在滑动到边界时,确保数据源中有足够的数据项,避免出现空白区域。如果数据源中的数据项较少,可以考虑在数据源中添加占位符或默认值。

4. 示例代码

以下是一个简单的示例,展示如何使用 picker-view 实现多列级联选择:

<template>
  <view>
    <picker-view :value="pickerValue" @change="handlePickerChange">
      <picker-view-column>
        <view v-for="(item, index) in provinceList" :key="index">{{ item.name }}</view>
      </picker-view-column>
      <picker-view-column>
        <view v-for="(item, index) in cityList" :key="index">{{ item.name }}</view>
      </picker-view-column>
      <picker-view-column>
        <view v-for="(item, index) in districtList" :key="index">{{ item.name }}</view>
      </picker-view-column>
    </picker-view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      pickerValue: [0, 0, 0],
      provinceList: [
        { name: '北京', id: 1 },
        { name: '上海', id: 2 },
        { name: '广东', id: 3 }
      ],
      cityList: [],
      districtList: []
    };
  },
  mounted() {
    this.updateCityList(this.provinceList[0].id);
  },
  methods: {
    handlePickerChange(e) {
      const [provinceIndex, cityIndex, districtIndex] = e.detail.value;
      const selectedProvince = this.provinceList[provinceIndex];
      const selectedCity = this.cityList[cityIndex];

      this.updateCityList(selectedProvince.id);
      this.updateDistrictList(selectedCity.id);

      this.pickerValue = [provinceIndex, cityIndex, districtIndex];
    },
    updateCityList(provinceId) {
      // 根据省份ID获取城市列表
      this.cityList = [
        { name: '城市1', id: 1 },
        { name: '城市2', id: 2 }
      ];
    },
    updateDistrictList(cityId) {
      // 根据城市ID获取区县列表
      this.districtList = [
        { name: '区县1', id: 1 },
        { name: '区县2', id: 2 }
      ];
    }
  }
};
</script>
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!