vant组件库中实现多选下拉框

文章展示了如何在vant移动端组件库中,结合popup弹出框和checkbox复选框组件,创建一个支持多选的城市选择下拉框。通过van-checkbox-group和van-cellGroup进行遍历渲染选项,并利用van-checkbox的toggle()方法处理选中状态,同时更新父组件的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vant移动端组件中并没有支持多选的下拉组件

所以将vant中的 popup弹出框组件和 CheckBox复选框组件两者结合为多选下拉框

<van-form>
   <van-field
    v-model="detailInfo.coverableCities"
    type="text"
    label="覆盖城市"
    required
    placeholder="请选择可覆盖城市(可多选)"
    :rules="rules.coverableCities"
    @focus="coverableCitiesObj.coverableCitiesShow = true">
   </van-field>
   <van-icon name="arrow" color="#999" size="1.2rem" />
</van-form>
<van-popup
 v-model="coverableCitiesObj.coverableCitiesShow"
 position="bottom"
 :style="{ height: '50%' }">
 <van-checkbox-group v-model="coverableCitiesObj.coverableCities">
    <van-cell-group>
        <van-cell
         v-for="(item, index) in coverableCitiesObj.coverableCitiesList"
         clickable
         :key="index"
         :title="item"
         @click="onSelectCoverableCities(index)">
           <template #right-icon>
             <van-checkbox :name="item" ref="CoverableCities" />
           </template>
         </van-cell>
     </van-cell-group>
 </van-checkbox-group>
</van-popup>
// 可覆盖城市
coverableCitiesObj: {
  coverableCities: [],
  coverableCitiesShow: false,
  coverableCitiesList: ["选项一", "选项二", "选项三"],
},
/**
 * 选择可覆盖城市
 */
onSelectCoverableCities(index) {
  this.$refs.CoverableCities[index].toggle();
  setTimeout(() => {
     this.detailInfo.coverableCities = 
        this.coverableCitiesObj.coverableCities
        ? this.coverableCitiesObj.coverableCities.join(",")
        : "";
  }, 100);
},

效果:

f174dfd27c4c4722b744ca858bf82658.png

032e362cda7144a5bdee57b69fcfc170.png 

627f385dc46547038c963f2222309d17.png 

<van-checkbox :name="item" ref="CoverableCities" />

name代表的是遍历的每一个checkbox的名字,也是当前选中单个的checkbox的目标。

ref代表遍历的每一个checkbox的ref,为了找到当前点击的checkbox的目标去使用toggle( )方法。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值