首页 > 编程语言 >【微信小程序】【Demo】Picker模糊查询组件

【微信小程序】【Demo】Picker模糊查询组件

时间:2023-09-19 17:27:02浏览次数:42  
标签:Picker 微信 self let Demo 组件 items data setData

微信小程序Picker模糊查询组件

 

pickerSelect.js

Component({
  options: {
    // 在组件定义时的选项中启用多slot支持
    multipleSlots: true
  },
  /**
   * 组件的属性列表
   */
  properties: {
    // 父组件传递过来的数据列表
    items: {
      type: Array,
      value: []
    },
    // 数据列表的key名
    keyName: {
      type: String,
      value: "value"
    },
    // 当前已选中项
    initValue: {
      type: String,
      value: ''
    },
  },
  /**
   * 组件的初始数据
   */
  data: {
    //控制picker的显示与隐藏
    flag: true,
    // 用户输入的关键词
    searchValue:'',
    // 滚动选择的
    setValues: [],
    // 滚动选择的索引
    selectIndex:'',

    //父组件的模糊查询列表方法,通过js设置。
    parentSearchItemList:null,
    //确认选择事件
    pickerSelectConfirm:null,

  },
  /**
   * 组件的方法列表
   */
  methods: {
  /**
  * @name: 搜索,输入框输入事件触发
  */
  searchList(e){
    if(this.data.parentSearchItemList!=null){
      try {
        this.data.parentSearchItemList(e.detail);
      } catch (error) {
      }
    }
    // let self = this;
    // self.triggerEvent('searchList', e.detail);
  },
  /**
  * @name: 隐藏picker
  */
  hiddeDatePicker(){
    let self = this;
    self.setData({
      flag: !self.data.flag
    })
  },
  /**
  * @name: 展示picker
  */
  showDatePicker(){
    let self = this;
    self.setData({
      flag: !self.data.flag
    })
    self.getItems()
  },
  /**
  * @name: 选择好后,点击确定
  */
  confirm(){
    let self = this;
    // 获取用户选择的
    let item = self.data.items[self.data.selectIndex]?self.data.items[self.data.selectIndex]:self.data.items[0];
    if(this.data.pickerSelectConfirm!=null){
      try {
        this.data.pickerSelectConfirm(item,self.data.selectIndex);
      } catch (error) {
      }
    }
    // // 通过发送自定义事件把用户选择的传递到父组件
    // self.triggerEvent('confirm', item);
  },
  /**
  * @name: 用户滚动picker时,获取滚动选择的索引
  */
  bindChange(e){
    let self = this;
    self.setData({
      // 用户选择的索引
      selectIndex:e.detail.value[0]
    })
  },
  /**
   * @name: 获取初始化信息
   */
  getItems(e){
    let self = this;
    if (self.data.items.length && self.data.initValue) {
      let items = self.data.items
      for (let i = 0; i < items.length; i++) {
        if (self.data.initValue == items[self.data.keyName]) {
          self.setData({
            setValues: [i]
          })
          return
        }
      }
    }
    self.setData({
      setValues: [0]
    })
  },
},
})
View Code

 

pickerSelect.wxml

<view class="date-background" hidden="{{flag}}">
  <view class='date-gray-background' bindtap='hiddeDatePicker'></view>
  <view class='date-container'>
    <view class="transparent">
      <view class='date-confirm'>
        <view bindtap='hiddeDatePicker'>取消</view>
        
        <input value="{{searchValue}}"
          input-align="center"
          placeholder="请输入关键词"
          bindinput ="searchList"
          />
        <view bindtap='confirm'>确定</view>
      </view>
      <picker-view
        indicator-class="indicator"
        value="{{setValues}}"
        bindchange="bindChange"
        bindpickend="_bindpickend"
        indicator-style="height: 100rpx;"
        mask-style="height:900rpx;"
        style="width: 100%; height: 90%;position:absolute;bottom:0rpx;text-align:center;background:white"
      >
        <picker-view-column class="pickViewColumn">
          <view wx:for="{{items}}" wx:key="{{keyName}}" style="line-height: 104rpx">{{item[keyName]}}</view>
        </picker-view-column>
      </picker-view>
    </view>
  </view>
</view>
View Code

 

pickerSelect.wxss

.date-background {
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
}
.date-gray-background {
  position: absolute;
  width: 100%;
  top: 0;
  background: rgba(0, 0, 0, .5);
  height: calc(100% - 500rpx);
}
.date-container {
  position: absolute;
  width: 100%;
  height: 900rpx;
  overflow: hidden;
  background: #fff;
  bottom:0;
  z-index: 1000;
}

.date-confirm {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding:0 20rpx;
  font-size:34rpx;
  line-height: 70rpx;
  color:var(--ThemeColor)
}
.pickViewColumn{
  height: 900rpx;
  margin-top: -300rpx;
}
.indicator{
height: 80rpx;
border: 1rpx solid #E5E8E8;
}
View Code

 

pickerSelect.json

{
  "component": true
}
View Code

 

调用wxml

      <view  class="t-cell tip " bindtap="showPickerSelect1">
        {{productClassList[classIndex].ClassName}}
        <image class="right-image" mode="aspectFit" src='{{ImgDomain}}/images/icon/right.png'></image>
      </view> 


<pickerselect id="pickerselect1" items="{{productClassList}}" keyName="ClassName" initValue="{{productClassList[classIndex].ClassName}}"></pickerselect>
View Code

 

调用js

  //显示picker查询组件
  showPickerSelect1(){
    let self = this;
    self.pickerselect1.showDatePicker()
  },
  hidePickerSelect1(){
    let self = this;
    self.pickerselect1.hiddeDatePicker()
  },
  parentSearchItemList(detail){
    //模糊查询picker的列表
    this.data.searchClassName=detail.value;
    this.getProductClassList(this.data.strainClassId);
  },
  pickerSelectConfirm(item,index){
    // this.bindClassChange({detail:{value:index}});
    this.setData({
      classIndex: index,
      classValue: [index]
    })
    this.pickerselect1.hiddeDatePicker()
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onl oad: function(options) {
    
    let self = this;
    // 初始化自定义picker实例
    self.pickerselect1 = self.selectComponent("#pickerselect1");
    self.pickerselect1.setData({
      //模糊查询输入关键词事件
      parentSearchItemList:this.parentSearchItemList,
      //确认选择事件(e=item)
      pickerSelectConfirm:this.pickerSelectConfirm,
    });

  },
View Code

 

标签:Picker,微信,self,let,Demo,组件,items,data,setData
From: https://www.cnblogs.com/lanofsky/p/17715180.html

相关文章

  • 开发微信支付C/C++代码
     抄自:  https://zhuanlan.zhihu.com/p/606909332?utm_id=0 在QtC++中实现微信收费使用功能需要借助微信开放平台提供的API接口,具体步骤如下:注册微信开放平台账号,并创建应用。在创建应用时,需要选择相应的应用类型(如网页应用、移动应用等)和使用场景(如公众号、小程序等),并......
  • 微信小程序转换成uniapp项目
    1.把微信小程序转换成uniapp项目1.1 安装miniprogram-to-uniapp插件打开cmd,运行【npminstallminiprogram-to-uniapp-g】进行安装,因为这个包是工具,要求全局都能使用,所以需要-g进行全局安装。npminstallminiprogram-to-uniapp-g如果运行npm报错,请先安装Node.js,下载地......
  • RK3568开发笔记(十):开发板buildroot固件移植开发的应用Demo,启动全屏显示
    前言  上一篇,移植应用前的通讯接口工作和全屏工作都已经完成了。本篇移植开发的商业应用。<br>交叉编译好应用  (略),参照《RK3568开发笔记(八):开发板烧写buildroot固件(支持hdmi屏),搭建Qt交叉编译开发环境,编译一个Demo,目标板运行Demo测试》<br>解决全屏标题栏占用问题  交叉......
  • RK3568开发笔记(十):开发板buildroot固件移植开发的应用Demo,启动全屏显示
    前言  上一篇,移植应用前的通讯接口工作和全屏工作都已经完成了。本篇移植开发的商业应用。 交叉编译好应用  (略),参照《RK3568开发笔记(八):开发板烧写buildroot固件(支持hdmi屏),搭建Qt交叉编译开发环境,编译一个Demo,目标板运行Demo测试》 解决全屏标题栏占用问题......
  • 【微信小程序】RichText(92/100)
    布局如下:<!--pages/richText/richText.wxml--><viewclass="page-section-title">通过HTMLString渲染</view><scroll-viewscroll-y>{{htmlSnip}}</scroll-view><buttonstyle="margin:30rpx0"type="primary"......
  • 【微信小程序】简洁好用的icon(94/100)
    布局<!--pages/icon/icon.wxml--><iconclass="icon-box-img"type="success"size="50"></icon><viewclass="icon-box-title">成功</view><iconclass="icon-box-img"type="info......
  • 9-微信小程序的网站的接口调用(直接调用)
    微信小程序除了在第三方调用接口,还可以直接从网站调用接口,但是每个网站都有保护措施,所以要寻找那些没有防护的,可以来直接调用的网站。 案例:豆瓣电影的接口调用1.百度豆瓣电源,找寻需要调用的页面 2.右键检查,或F12 3.回车,再次发起请求,查看网站接口 微信小程序作为新兴......
  • 基于微信的垃圾分类小程序
    现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本垃圾分类小程序就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍......
  • 8-微信小程序的网站的接口调用
    案例:查询天气预报1.需要使用到的接口网址,在百度搜索聚合数据:https://www.juhe.cn/  聚合数据是一个请求接口的网站 准备工作做好后,就开始打开微信小程序编译器wxml:<view class="top" >    <text>查看天气预报</text></view><form bindsubmit="submit" >......
  • 7-微信小程序 tabBar导航栏
    微信小程序tabBar是小程序底部的一个导航栏,用于在不同的页面之间进行切换。下面是一个示例代码,展示如何在微信小程序中使用tabBar。在小程序的app.json文件中,添加tabBar配置项,示例代码如下:"tabBar": {      "color":"#ccc",    "list": [{      ......