微信小程序picker自定义地址字典,取值id

后台非要搞点个什么地址字典,让我传字典区域的id给他
在这里插入图片描述

字典数据如下:
在这里插入图片描述

		<picker mode="multiSelector" bindcolumnchange="bindMultiPickerColumnChange" value="{{multiIndex}}" range="{{areaCode}}" bindchange="bindMultiPickerChange">
			<view class="picker">
				{{areaCode[0][multiIndex[0]]}},{{areaCode[1][multiIndex[1]]}},{{areaCode[2][multiIndex[2]]}}
			</view>
		</picker>
data: {
    multiIndex: [0, 0, 0], // 选中值的索引
    areaCode: [], // 给picker展示的数据
    cityJson: [], // 字典原始数据
    areaID: null, // 最终选中的区域ID
    }
      onShow: function () {
      // 执行接口 获取字典,放本地也行,看自己情况
    this.getPca()
  },
   // 获取地址编码字典
   getPca () {
    var that = this
    app.request({
      url: '/api/Index/getPca',
      method: "get",
      success: function (res) {
        if (res.status == 1) {
        // 以下对areaCode的操作,是为了数据最开始的默认值,取的是数据里[0]省.[0]市.[0]区
        // 把原始数据赋值给cityJson,后续操作picker的时候需要用cityJson重新给areaCode赋值
          var areaCode = that.data.areaCode
          areaCode[0] = res.res.map(function(v){return v.provinceName});
          areaCode[1] = res.res[that.data.multiIndex[1]].cities.map(function(v){return v.cityName});
          areaCode[2] = res.res[that.data.multiIndex[1]].cities[that.data.multiIndex[2]].areas.map(function(v){return v.areaName})
          that.setData({
            areaCode: areaCode,
            cityJson: res.res
          })
        } else {
          wx.showToast({
            title: res.msg,
            icon: 'none'
          })
        }
      }
    })
  },
    // 操作picker
  bindMultiPickerChange: function (e){
    this.setData({
      multiIndex: e.detail.value
    })
  },
      // 列变化
  bindMultiPickerColumnChange: function(e) {
    var that = this
    var cityJson = that.data.cityJson
    var areaCode = that.data.areaCode
     // 列的值改变时触发
     // 监听用户操作,改变multiIndex的值
     var multiIndex =  that.data.multiIndex
     multiIndex[e.detail.column] = e.detail.value;
     that.setData({
      multiIndex: multiIndex
     },()=>{
       // areaID 这里就是取到了对象的id了,对原始数据进行索引的取值
       var areaID = cityJson[multiIndex[0]].cities[multiIndex[1]].areas[multiIndex[2]].areaID
       that.setData({
          areaID: areaID
       })
     })

     // areaCode[0]的值是不会随用户操作变更的,因此不需要改变  
     // areaCode[1]的值是由 mulIndex[0]的值决定的 用原始数据重新筛选替换到开始的 areaCode
     areaCode.splice(1,1,cityJson[that.data.multiIndex[0]].cities.map(function(v){return v.cityName}));
     // areaCode[2]的值是由 muIndex[1]的值决定的 
    areaCode.splice(2,1,cityJson[that.data.multiIndex[0]].cities[that.data.multiIndex[1]].areas.map(function(v){return v.areaName}))
     this.setData({
      areaCode: areaCode
     })
},
微信小程序中的Picker组件是一个内置的下拉框控件,它提供了一些默认样式和功能。如果需要自定义下拉框弹窗的样式,可以使用自定义组件实现。 以下是一个示例代码,演示如何使用自定义组件实现自定义下拉框弹窗样式: 1. 在小程序根目录下创建一个名为 "custom-picker" 的自定义组件文件夹,并在该文件夹下创建一个名为 "custom-picker.wxml" 的模板文件。 2. 在 custom-picker.wxml 文件中编写下拉框弹窗的结构和样式,例如: ```html <view class="picker-container"> <view class="header"> <text class="cancel" bindtap="onCancel">取消</text> <text class="title">{{title}}</text> <text class="confirm" bindtap="onConfirm">确定</text> </view> <picker class="picker" value="{{value}}" range="{{range}}" bindchange="onChange"></picker> </view> ``` 3. 在 custom-picker.js 文件中编写自定义组件的逻辑,例如: ```javascript Component({ properties: { title: String, value: Number, range: Array }, methods: { onCancel: function() { this.triggerEvent('cancel'); }, onConfirm: function() { this.triggerEvent('confirm', { value: this.data.value }); }, onChange: function(e) { this.setData({ value: e.detail.value }); } } }); ``` 4. 在使用该自定义组件的页面中,引入该组件并传入相应的属性,例如: ```html <custom-picker title="请选择" value="{{index}}" range="{{range}}" bind:cancel="onPickerCancel" bind:confirm="onPickerConfirm"></custom-picker> ``` 5. 在页面的 js 文件中编写相应的逻辑,例如: ```javascript Page({ data: { range: ['选项一', '选项二', '选项三'], index: 0 }, onPickerCancel: function() { // 取消选择 }, onPickerConfirm: function(e) { const value = e.detail.value; // 确认选择 } }); ``` 通过以上步骤,就可以实现自定义下拉框弹窗的样式和功能。需要注意的是,自定义组件的样式和逻辑都需要自行编写。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值