van-picker下拉框添加搜索和分页功能

<template>
  <div class="content">
    <div class="picker">
      <label class="rediconc" v-show="pickerObj.isRequired">*</label>
      <van-field
        v-model="pickerval"
        is-link
        readonly
        :label="pickerObj.title"
        :placeholder="pickerObj.placeholder"
        @click="onClick"
      />
    </div>
    <div class="bigblack" v-show="show" @click.self="hiddenshow">
        <!-- 搜索start -->
        <van-search placeholder="请输入" v-model="goodsNameValue" @input='getMerchantGoods' />
        <!-- 搜索 end-->
        <!-- 分页start -->
        <van-pagination v-model="pageNum" :total-items="total" 
          :show-page-size="4" 
          @change="changePageFun"
          force-ellipses
        >
          <template #prev-text><van-icon name="arrow-left" /></template>
          <template #next-text><van-icon name="arrow" /></template>
          <template #page="{ text }">{{ text }}</template>
        </van-pagination> 
        <!-- 分页end -->
        <van-picker
          title="请选择"
          value-key="name"
          show-toolbar
          :columns="columns"
          @confirm="onConfirm"
          @cancel="onCancel"
        />
    </div>
  </div>
</template>
<script>
import Picker from 'vant/lib/picker'
export default {
  props: ['pickerObj'],
  data() {
    return {
      pickerval: '',
      show: false,
      columns: [],
      merchantCode: '', 
      goodsNameValue:'',
      depNameShow:'',
      depColumnsSearch:[{
        name:'',
        val:''
      }],
      pageNum: 1,
      pageSize: 10,
      total:1
    }
  },
  components: {
    'van-picker': Picker,
  },
  created() {
    this.pickerval = this.pickerObj.thisValue
  },
  watch: {
    pickerObj: {
      handler(val) {
        this.pickerval = this.pickerObj.thisValue
        this.show = this.pickerObj.isShow
      },
      deep: true,
    }
  },
  mounted() {
   
    this.getMerchantGoods()
  },
  methods: {
    getMerchantGoods() {       
      // 获取列表columns         
      ......    
    },
    // 分页改变
    changePageFun(val){
      this.changePage = val
      this.getMerchantGoods()
    },
    loseblur() {},
    onClick() {
      this.show = true
      this.$emit('clickFn')
    },
    onConfirm(value, index) {
      this.show = false
      this.goodsNameValue = ''
      this.getMerchantGoods()
      this.pickerval = value.name
      this.$emit('fromChild', value)
    },
    onCancel() {
      this.show = false
      if (this.pickerval == '') {
      }
    },
    //隐藏遮罩
    hiddenshow() {
      this.show = false
    },
  },
}
</script>
<style lang="less" scoped>
.content {
  font-size: 15px;
  .picker {
    font-size: 15px;
    position: relative;
    border-bottom: 1px solid #eee;
    .rediconc {
      z-index: 99;
      position: absolute;
      left: 10px;
      top: 19px;
      color: #f00;
    }
    .van-cell {
      font-size: 15px;
      height: 46px;
      line-height: 46px;
      padding: 0px 10px 0 15px;
    }
    .custom-title {
      margin-left: 5px;
    }
    /deep/.van-field__label {
      margin-left: 5px;
      width: 110px;
      span {
        font-size: 15px;
      }
    }
    /deep/.van-field__control {
      text-align: right;
    }
    /deep/.van-icon {
      line-height: 46px;
    }
  }
  .bigblack {
    height: 100%;
    width: 100%;
    z-index: 999;
    position: fixed;
    bottom: 0;
    background-color: rgba(0, 0, 0, 0.2);
    .van-picker {
      position: fixed;
      bottom: 0;
      width: 100%;
      height: 50%;
    }
    .van-pagination{
      position: absolute;
      bottom: 0%;
      z-index: 99;
      width: 100%;
    }
    .van-search{
      position: relative;
      top: 44%;
      z-index: 9999;
    }
  }
}
</style>

引用

<searchPicker :pickerObj="vegetableType" @fromChild="vegetableTypeFunc"></searchPicker>

以下为 在data()方法中设置要传的值

 vegetableType:{
   isRequired: false, // false为非必填
   title: 'label名',
   placeholder: '请选择',
   type: 'text',
   selectList: [
     
   ],
   thisValue: '',  // 这个值用来返显
 },

赋值方法在methods中写:

vegetableTypeFunc(val){
  console.log(val)
},
Vant Picker是一个可以滚动选择的下拉列表组件,类似于Select下拉列表。在Vant文档中,虽然没有提供直接的API来实现搜索功能,但可以通过手动实现来实现搜索功能。一个思路是添加一个搜索框,并对搜索框的数据进行双向绑定。然后使用Vue的watch来监听数据的变化,每次数据更新后,可以使用匹配规则对请求接口返回的数据列表进行筛选,并将筛选后的数据列表绑定给Picker组件,从而实现搜索功能。这个功能不需要请求后端接口,可以直接在前端进行处理。 官方文档中可能并未提供详细的实现方法,但通过仔细阅读文档、方法类型的说明,可以找到相关内容。此外,度娘也可能无法直接提供相关信息,因此可能需要花费一些时间进行试错解决问题。你可以参考官方文档尝试不同的方法参数来实现vant picker搜索功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【每天学一点-05】在Vue中使用Vant组件-picker选择器,并给选择器添加搜索功能](https://blog.youkuaiyun.com/weixin_43906233/article/details/125943267)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Vant picker 多级联动操作](https://download.youkuaiyun.com/download/weixin_38731979/14693049)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值