vant实现select多选效果

为解决移动端与PC端select多选一致性问题,通过结合cell单元格与checkbox复选框,自行封装了一个多选组件。该组件利用了vant的popup及cell等组件,并添加搜索功能提升用户体验。

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

背景:移动端需要和pc端select多选相对应,但是并没有现成的组件,vant只提供了picker选择器可以实现单选效果,所以需要自己封装组件

方法:把cell单元格和checkbox复选框结合,实现多选效果

代码(js代码根据需要去写就可以啦)

 <van-popup
      v-model="showPicker"
      :value="true"
      @close="closePopup"
      position="bottom"
      :style="{ height: '60%' }"
    >
      <van-search
        :placeholder="placeholder"
        v-model="searchData"
        @search="getColumnList()"
        @input="getColumnList()"
        @clear="getColumnList()"
      ></van-search>
      <!-- v-model="checkedValue" -->
      <van-checkbox-group
        ref="checkboxGroup"
        @change="change"
        v-model="checkedValue"
      >
        <van-cell-group>
          <van-cell
            v-for="(item, index) in list"
            clickable
            :key="item.specificEventId"
            :title="item.specificEventName"
            @click="toggle(index)"
          >
            <template #right-icon>
              <van-checkbox :name="item" ref="checkboxes" shape="square" />
            </template>
          </van-cell>
        </van-cell-group>
      </van-checkbox-group>
    </van-popup>

您可以使用Vant4中的`Cascader`组件来生成级联择器。这个组件允许您在一个单独的组件中展示个级联择器,每个级联择器之间可以进行联动。以下是一个简单的示例代码: ```html <template> <van-cascader :options="options" v-model="value" :active-item-class="activeItemClass" :item-height="itemHeight" :height="height" :visible-item-count="visibleItemCount" :placeholder="placeholder" :toolbar-position="toolbarPosition" :close-on-click-outside="closeOnClickOutside" :close-on-click-overlay="closeOnClickOverlay" :lazy-render="lazyRender" :expand-trigger="expandTrigger" :cascade="cascade" :border="border" :readonly="readonly" :disabled="disabled" :title="title" :columns-top="columnsTop" :columns-bottom="columnsBottom" :option-render="optionRender" :option-disabled="optionDisabled" :format="format" :before-confirm="beforeConfirm" :confirm-button-text="confirmButtonText" :cancel-button-text="cancelButtonText" @confirm="onConfirm" @cancel="onCancel" @change="onChange" /> </template> <script> export default { data() { return { options: [ { text: 'Fruit', value: 'fruit', children: [ { text: 'Apple', value: 'apple' }, { text: 'Banana', value: 'banana' }, { text: 'Orange', value: 'orange' } ] }, { text: 'Drink', value: 'drink', children: [ { text: 'Water', value: 'water' }, { text: 'Tea', value: 'tea' }, { text: 'Coffee', value: 'coffee' } ] } ], value: [], activeItemClass: '', itemHeight: 44, height: 220, visibleItemCount: 5, placeholder: 'Please select', toolbarPosition: 'bottom', closeOnClickOutside: true, closeOnClickOverlay: true, lazyRender: true, expandTrigger: 'click', cascade: true, border: true, readonly: false, disabled: false, title: '', columnsTop: [], columnsBottom: [], optionRender: '', optionDisabled: '', format: '', beforeConfirm: '', confirmButtonText: 'OK', cancelButtonText: 'Cancel' }; }, methods: { onConfirm(value) { console.log(value); }, onCancel() { console.log('cancel'); }, onChange(value) { console.log(value); } } }; </script> ``` 在这个示例中,`options`是一个包含所有级联择器项的数组,`value`是一个数组,其中包含用户择的所有项的值。您可以使用`@change`事件来监听用户择的项,`onConfirm()`方法会在用户点击确认按钮时触发,`onCancel()`方法会在用户取消择时触发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值