【经验分享】如何实现自定义数据源的级联选择组件?

简介: 【经验分享】如何实现自定义数据源的级联选择组件?

先上效果图:

效果跟 my.regionPicker 一致,但是数据源是我们自定义,并不只是城市

my.regionPicker 数据源内置为城市,并且企业才能使用,不支持个人。


开发过支付宝小程序的小伙伴都知道 支付宝的 picker 实现有两种方式:

一种是直接使用picker组件,一种是使用my.optionSelect的方式唤起picker。

这两种方式有一个共同的缺点:那就是还不支持级联选择,只能使用 my.multiLevelSelect 实现级联选择,但是这个UI样式的级联选择却不是我们需要的。


那么我们如果需要自定义 picker的UI样式该如何操作呢?

这里我们使用到了 picker-view组件,并对从下往上的弹出效果做了个pop-up组件:

<view class="address-item" onTap="pickAddress">
  <view class="item-title">所在地区:</view>
  <view class="item-content arrow {{region ? '' : 'item-content_shadow'  }}">{{region||"请选择"}}</view>
</view>
<pop-up visible="{{visible}}" onClose="closePopUp">
  <view slot="content">
    <view class="picker-view">
      <view class="picker-view__pane">
        <text catchTap="cityCancel">取消</text>
        <text catchTap="citySure">确定</text>
      </view>
      <picker-view class="pick-view__group" onChange="cityChange" value="{{value}}">
        <picker-view-column indicator-class="item_active">
          <view a:for="{{provinces}}" class="picker-item" a:key="index">{{item.name}}</view>
        </picker-view-column>
        <picker-view-column>
          <view a:for="{{citys}}" class="picker-item" a:key="index">{{item.name}}</view>
        </picker-view-column>
        <picker-view-column>
          <view a:for="{{areas}}" class="picker-item" a:key="index">{{item.name}}</view>
        </picker-view-column>
      </picker-view>
    </view>
  </view>
</pop-up>


实现出来的效果 其实是有点小问题的,希望官方对于picker-view组件能增加 onPickerStart 以及 onPickerEnd的回调方法。方便我们对于用户开始滑动picker以及picker惯性滚动结束的通知进行处理。


详细逻辑处理都已放到代码片段里,具体的代码建议自行查看即可,就不贴出来啦。

https://pen.mini-code.com/s/d7318d5d-005c-48ed-bc64-9552bce738b9


Q&A:

  1. 在哪里可以初始化这个picker呢 比如我一进来要选择广东省广州市白云区。
  1. 广东省广州市白云区的下标为[18, 0, 5] 我们只需要给它赋值一次即可。
onLoad(options) {
  // 默认联动显示北京
  var id = address.provinces[18].id 
  this.setData({
    provinces: address.provinces, // 34省
    citys: address.citys[id], //默认北京市辖区
    areas: address.areas[address.citys[id][0].id],
    value: [18, 0, 5],
    regionValue: [18, 0, 5]
  })
},
  1. 数据源如何自定义?
  1. 修改代码里city.js的数据格式,建议尽量按照格式进行替换,不然需要修改下index.js的字段。
目录
相关文章
|
10月前
|
人工智能 并行计算 测试技术
从商业海报到二次元插画多风格通吃!HiDream-I1:智象未来开源文生图模型,17亿参数秒出艺术大作
HiDream-I1是智象未来团队推出的开源图像生成模型,采用扩散模型技术和混合专家架构,在图像质量、提示词遵循能力等方面表现优异,支持多种风格生成。
981 2
从商业海报到二次元插画多风格通吃!HiDream-I1:智象未来开源文生图模型,17亿参数秒出艺术大作
|
SQL 存储 关系型数据库
SQL语言优缺点有哪些?
SQL(Structured Query Language)语言作为数据库管理和操作的标准语言,具有一系列的优点,同时也存在一些缺点。
463 7
|
移动开发 小程序 测试技术
自定义多级联动选择器指南(uni-app)
在本文中,探讨了如何在uni-app中创建自定义多级联动选择器组件。这个组件具有强大的多端支持,可适用于H5、APP、微信小程序、支付宝小程序等多种平台。
1388 1
自定义多级联动选择器指南(uni-app)
|
Docker 容器
paddleocr 在docker环境下部署_docker部署paddleocr,90%的人看完都说好
paddleocr 在docker环境下部署_docker部署paddleocr,90%的人看完都说好
|
XML Java 数据格式
【Spring】全面讲解IOC、AOP、注入方式、bean的生命周期、aop通知应用 spring与web容器整合
Spring是一个开源的轻量级Java应用开发框架,它提供了一种简单、高效、灵活的方式来构建企业级应用程序。Spring框架的核心特点是依赖注入(Dependency Injection)和面向切面编程(Aspect-Oriented Programming),它通过一组模块化的组件提供全面的支持,使开发人员能够快速搭建可扩展、可维护的应用。
|
数据采集 人工智能 数据可视化
Python selenium爬虫被检测到,该怎么破?
Python selenium爬虫被检测到,该怎么破?
1914 9
|
敏捷开发 Devops 持续交付
《SAFe 5.0精粹 面向业务的规模化敏捷框架》 读书笔记
本书由李建昊老师翻译,介绍《SAFe 5.0精粹 面向业务的规模化敏捷框架》。SAFe(Scaled Agile Framework)为企业提供精益、敏捷及DevOps的知识库,涵盖13门课程与认证。SAFe具备七个核心能力,如精益-敏捷领导力等,并提供不同配置以适应各种需求,包括基本型、大型解决方案及投资组合SAFe等。此外,SAFe还强调持续学习文化及精益思维,助力企业实现业务敏捷化转型。
386 0
《SAFe 5.0精粹 面向业务的规模化敏捷框架》 读书笔记
|
开发框架 前端开发 JavaScript
循序渐进VUE+Element 前端应用开发(21)--- 省市区县联动处理的组件使用
循序渐进VUE+Element 前端应用开发(21)--- 省市区县联动处理的组件使用
|
存储 安全 PHP
【文件上传绕过】——条件竞争漏洞
【文件上传绕过】——条件竞争漏洞
698 5