茅香馨 发表于 2025-6-11 15:47:59

Vant框架 picker多选框实现

vant作为一款适配手机的前端框架使用起来还是很方便的,但是对于Picker 选择器的拓展有限,不支持下拉多选的实现,这里通过van-checkbox-group 和 van-checkbox 组件来实现多选功能。
搭配van-popup 将弹窗内容写入

      <van-field v-model="userNameStr" readonly name="userIds" label="人员列表" placeholder="点击选择人员,可多选"
      @click="joinUsersHandleFocus" />
      <van-popup round v-model:show="showPicker" position="bottom" :>
      
          <van-button plain type="primary" size="small" @click="showPicker= false">取消</van-button>
          选择人员
          <van-button plain type="primary" size="small" @click="onConfirmUsers">确定</van-button>
      
      <van-search v-model="searchParam" placeholder="请输入搜索关键词" @search="onSearchUsers" @clear="onClearSearch" />
      <van-checkbox-group v-model="studentGroupChecked">
          <van-cell v-for="user in filteredUserOptions" :key="user.value">
            <template #title>
            <van-checkbox :name="user.value">{{ user.text }}</van-checkbox>
            </template>
          </van-cell>
      </van-checkbox-group>
      </van-popup>这里通过van-search控制列表搜索,展示带选择框的列表,效果如下

showPicker控制van-popup和其包含的内容是否展示,onConfirmUsers为选中后点击确认调用的方法
const onConfirmUsers = () => {
    const selectedUsers = userOptions.value.filter(user => studentGroupChecked.value.includes(user.value));
    showPicker.value = false;
};通过获取studentGroupChecke的值拿到选中项,对选中项的数据进行处理
const onSearchUsers = () => {
    if (!searchParam.value) {
      filteredUserOptions.value = userOptions.value;
      return;
    }
    filteredUserOptions.value = userOptions.value.filter(user =>
      user.text.toString().toLowerCase().includes(searchParam.value.toLowerCase())
    );
};userOptions 为初始获取到的全部搜索内容选项,filteredUserOptions为根据搜索栏过滤后返回的选项

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Vant框架 picker多选框实现