小程序vant weapp 封装下拉框

此文编写于2021-9-14,2022-5-2官方以提供area组件

Vant Weapp 官方已提供 省市区组件@vant/weapp/area/index


 

封装下拉框:

xml:

<van-field label="{{label}}" model:value="{{ value }}" placeholder="{{place}}" border="{{ true }}" readonly
  right-icon="{{icon}}" bindtap="tap" />
<van-popup show="{{ popShow }}" position="bottom" custom-style="height: 50%;overflow:hidden">
  <van-picker value-key="{{valueKeyName}}" id="picker" show-toolbar title="{{label}}" columns="{{ columns }}" bind:cancel="onCancel" bind:confirm="onConfirm" />
</van-popup>

js:

Component({
  /**
   * 组件的属性列表
   */
  properties: {
    label: String, //输入框标签
    place: String, //输入框提示
    columns:Array, //选择器 选项
    valueKeyName:{ //选择器 选项数组中 对象的value的默认key
      type:String,
      value:'text'
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    popShow: false,
    icon:'arrow-down'  //下拉箭头
  },

  /**
   * 组件的方法列表
   */
  methods: {
    //点击输入框触发
    tap() {
      this.setData({
        popShow: true,
        icon:'arrow-up'
      })
    },
    //点击取消
    onCancel() {
      this.setData({
        popShow: false,
        icon:'arrow-down'
      })
    },
    点击确认
    onConfirm(e) {
      let pic, value
      pic = this.selectComponent('#picker')
      //获取当前选中项的值  改值为对象
      value = pic.getValues()
      this.setData({
        value: value[0][this.data.valueKeyName],  //设置输入框为选择器选中的值
      })
      this.triggerEvent('confirm', {  //传递到组件外事件 , 返回当前选中项 对象
        value: value[0]
      })
      this.onCancel()
    }
  }
})

 呈现效果:

注释:label属性是左边那个'选择区域',placeholder 是 '输入提示',border 是内边框,readonly 输入框只读.  van-popup 弹窗 里面放入了一个选择器,value-key 接收columns的对象数组中的对象中要显示的value的默认key [ vant默认为text ]

使用该组件:

<select-popup label="选择区域" place="请选择区域" columns="{{list}}" bind:confirm="getIndex" valueKeyName="name"></select-popup>

 js:

Page({

  /**
   * 页面的初始数据
   */
  data: {
    list:[
      {code:'001',name:'武汉'},
      {code:'002',name:'南京'},
      {code:'003',name:'北京'},
      {code:'004',name:'西安'}]
  },

  getIndex(e){
    //打印选中项
    console.log(e.detail.value);
  },

})

打印结果:

注意:  app.jsonindex.json中引入组件

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值