小程序——下拉选择框组件

一、效果

在这里插入图片描述

二、说明

最近在开发微信小程序,但是用的lin-ui和@vant 都没有下拉选择框组件。在网上搜索一番后,发现了一个挺简单且很好用的下拉框组件。
链接在这里:https://blog.csdn.net/WeiflR10/article/details/121494131
原文中是直接写入数据,在此基础上我修改了一下,让它成为一个可复用的组件

三、代码

my_select.js

Component({
 properties: {
  title:{
   type: String,
   value: ""
  },
  nameList: {
   type: Array,
   value: [],
   observer: function(){
   //有的时候选项组是后端获取数据来的,初始化时可能为[],所以这里使用obersver,当父组件中值改变时触发
    this.processData();
   }
  },
  nowId: {
   type: Number,
   value: -1
  },
  nowName: {
   type: String,
   value: "",
   observer: function(){
    this.setData({select: this. properties.nowName,
     selectId: this.properties.nowId,});
   }
  },
  placeholder: {
   type: String,
   value: ""
  }
 },

 /**
  * 页面的初始数据
  */
 data: {
  selectcontent: [],
  changable: false, //箭头切换
  select: undefined, //选中的值
  selectId: undefined, //选中的id
 },
 methods: {
 // 下拉框收起和展开
  startChange(e) {
   this.setData({
    changable: !this.data.changable
   })
  },
  // 选择数据后回显
  changecontent(e) {
   this.setData({
    select: e.currentTarget.dataset.datavalue.name,
    selectId: e.currentTarget.dataset.datavalue.id,
    changable: false
   })
   this.triggerEvent("handleChange", {selectId: this.data.selectId, select: this.data.select});//向父组件传参
  },
  //处理数据,复制一遍,因为子组件不能直接改变父组件的传进来的值。
  processData(){
   let options = [];
   let that = this;
   this.properties.nameList.forEach((item) => {
    options.push({
     id: item.id,
     name: item.name,
    });
   }); //forEach
   this.setData({
    selectcontent: options,
    select: that.properties.nowName,
    selectId: that.properties.nowId,
   });
  }
 }
})

my_select.json

{
 "component": true,
 "usingComponents": {}
}

my_select.wxml

需要说明的是这里的箭头icon是使用的lin-ui,使用可以换成你自己用的ui框架或者用静态图片也可以。

<!--pages/components/my_select/my_select.wxml-->
<view class="select_all_view">
 <!-- 内容说明,可以没有 -->
 <view class="select_title" wx:if="{{title}}">{{title}}</view>
 <view class="select_view">
  <!-- 输入框 -->
  <view class="inputPlaceholder" bindtap="startChange">
   <text wx:if='{{select}}'>{{select}}</text>
   <text wx:else="{{select}}">{{placeholder}}</text>
   <view class="jiantou1" wx:if='{{changable}}'>
    <l-icon name="down" size="30" />
   </view>
   <view class="jiantou1" wx:else='{{changable}}'>
    <l-icon name="left" size="30" />
   </view>
  </view>
  <!-- 下拉展开后的可选择内容 -->
  <view class="content" wx:if='{{changable}}'>
   <view class="{{item.id==selectId ? 'active':''}}" wx:for="{{selectcontent}}" wx:key="idnex" bindtap="changecontent" data-datavalue="{{item}}">
    {{item.name}}
   </view>
  </view>
 </view>
</view>

my_select.wxss

这里z-index:99是为了显示在其他内容之上。但是也承认有一个缺陷是,这个组件如果用在modal里面,显示会有一些问题。

.select_all_view{
 display: flex;
 z-index: 999;
}
.select_view{
 display: inline;
}
.select_title{
 margin-right: 10rpx;
}
.inputPlaceholder{
 min-width: 300rpx;
 height: 45rpx;
 background-color: rgba(255, 255, 255, 0.5);
 border: 1px solid #DEDEDE;
 padding: 4rpx 0rpx 10rpx 10rpx;
 color: #252525;
 font-weight: 400;
 border-radius: 10rpx;
 position: relative;
 overflow:hidden;
 text-overflow: ellipsis;
 white-space:nowrap;
}
.jiantou1{
 position: absolute;
 right: 10rpx;
 top: 8rpx;
}
.content{
 position: absolute;
 z-index: 999;
 min-width: 280rpx;
 max-height:270rpx;
 background: #FFFFFF;
 box-shadow: 0px 0px 10px 1px rgba(88, 88, 88, 0.8);
 border-radius: 0 0 5% 5%;
 padding: 20rpx;
 overflow-x: hidden;
 overflow-y: scroll;
}
.content>.inputPlaceholder{
 padding: 10rpx 0;
}
.select_view .active{
 color:#46678d;
}

四、使用

先创建一个component,把代码复制过去。
和其他组件一样,需要在使用的page页面的json文件里引入。

 "usingComponents": {
  "my_select": "path/my_select/my_select"
 }

然后就能在页面中使用了
示例

example1
<my_select 
	nowId="{{curfId}}"
	nameList="{{fruits}}" 
	nowName="{{curfruitName}}" 
	placeholder="请选择水果" 
	bind:handleChange="changeFruit">
</my_select>

example2
<my_select 
	title="水果"
	nowId="{{curfId}}"
	nameList="{{fruits}}" 
	nowName="{{curfruitName}}" 
	placeholder="请选择水果" 
	bind:handleChange="changeFruit">
</my_select>
data: {
   curfId: 4,
   fruits: [{name: "苹果" ,id: 1},
   {name: "西瓜" ,id: 2},
   {name: "李子" ,id: 3},
   {name: "梨" ,id: 4}
  ],
  curfruitName:"梨" ,
  title: "水果"
 },
   changeFruit(e){
    console.log(e.detail.selectId);
    console.log(e.detail.select);
    // process();
 }

效果图
在这里插入图片描述

api

参数

参数类型说明默认值
titleString选择框前的说明文字,可以为空“”
namlistarray选项的名称和id格式为[{name: “xxx”,id: 1,{name: “xxx”,id: 2}}]。id不可重复[]
nowIdNumber初始选中选项id-1
nowNameString初始选中选项“”
placeholderString未选择时展示的字段“”

事件

事件名称说明
bind:handleChange选中值改变时会触发,event.detail.select是选中项的名称,event.detail.selectId选中项的id
  • 30
    点赞
  • 119
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
《精通JS脚本之ExtJS框架》由浅入深地讲解了ExtJS在Web开发中的相关技术。本书共分17章,分别介绍了JavaScript的对象编程、JavaScript浏览器对象模型和事件机制、ExtJS的核心类库和组件、ExtJS的事件处理方式、设计进度条、设计工具栏和菜单栏、设计面板、设计表格、设计表单、设计数据表、对Ajax的支持以及如何调试等。最后利用一个商品信息管理系统和一个企业任务管理系统,向读者演示了ExtJS在实际项目中的应用以及实现流程。   《精通JS脚本之ExtJS框架》附有配套光盘,提供了书中实例的源代码和视频教学文件。此外,读者还可以通过访问itzcn网站来获得即时在线帮助。   《精通JS脚本之ExtJS框架》可以作为Web开发的自学参考书,也可以作为RIA Web程序开发的培训教材。 第1章 JavaScript入门必备 1.1 JavaScript语言概述 1.1.1 JavaScript简介 1.1.2 JavaScript特点 1.1.3 JavaScript与Java 1.2 第一个JavaScript程序 1.2.1 嵌入JavaScript 1.2.2 链接外部JavaScript文件 1.2.3 注意事项 1.3 基础语法 1.3.1 数据类型 1.3.2 变量与常量 1.3.3 运算符 1.4 流程控制语句 1.4.1 if条件语句 1.4.2 switch条件语句 1.4.3 while循环语句 1.4.4 do while循环语句 1.4.5 for循环语句 1.4.6 for in循环语句 1.4.7 try catch finally语句 1.4.8 其他语句 第2章 JavaScript浏览器对象模型与事件处理 2.1 浏览器对象模型 2.1.1 文档对象 2.1.2 表单及其元素对象 2.1.3 浏览器信息对象 2.1.4 窗口对象 2.1.5 网址对象 2.1.6 历史记录对象 2.2 基本事件处理 2.3 2级DOM事件模型 2.3.1 事件传播 2.3.2 注册事件处理程序 2.3.3 event对象 2.4 常用事件 2.4.1 键盘事件 2.4.2 鼠标事件 2.4.3 页面事件 第3章 开始使用ExtJS 3.1 ExtJS概述 3.1.1 ExtJS简介 3.1.2 ExtJS中的基本概念 3.1.3 ExtJS与常见JavaScript库的介绍与对比 3.2 创建第一个程序 3.2.1 下载ExtJS 3.2.2 部署到开发工具中 3.2.3 编写HelloWorld.html 3.2.4 运行调试ExtJS 3.3 辅助开发 3.3.1 调试工具Firebug 3.3.2 开发利器Spket 第4章 ExtJS事件机制 4.1 设计模式——观察者模式 4.2 自定义事件 4.3 浏览器事件 4.4 ExtJS中的事件 4.4.1 Function.call()/apply()方法 4.4.2 函数的作用域 4.4.3 Ext.lib.Event事件 4.4.4 Ext.util.Observable事件 4.4.5 Ext.EventManager事件 4.4.6 Ext.EventObject事件 4.5 各种事件登记方式 4.5.1 传统式登记 4.5.2 内联式登记 4.5.3 Dom Level2登记 4.6 高级组件事件 4.7 ExtJS键盘事件 第5章 ExtJS组件 5.1 核心组件 5.1.1 ExtJS组件结构 5.1.2 Ext.Component 5.1.3 Ext.BoxComponent 5.1.4 Ext.Container 5.1.5 Ext.Panel 5.1.6 Ext.TabPanel 5.2 信息提示框组件 5.2.1 Ext.MessageBox简介 5.2.2 Ext.MessageBox.alert() 5.2.3 Ext.MessageBox.confirm() 5.2.4 Ext.MessageBox.prompt() 5.2.5 Ext.MessageBox.wait() 5.2.6 Ext.MessageBox.show() 5.2.7 Ext.MessageBox的其他功能 5.3 进度条组件 5.3.1 Ext.ProgressBar简介 5.3.2 手工模式的进度条 5.3.3 自动模式的进度条 5.3.4 自定义样式的进度条 5.4 工具栏和菜单栏 5.4.1 Ext.Toolbar简介 5.4.2
微信小程序中的select下选择组件,是一种常见的界面组件,用于在使用时经常需要从多个选项中选择一个的场景中。 在使用select下选择组件时,我们可以通过在wxml文件中使用<picker>标签来定义一个select组件。在<picker>标签中,我们可以设置多个选项,每个选项可以使用<picker-view-column>标签包裹,并在其中使用<picker-view-column-item>标签来定义具体的选项。 例如,如下代码段展示了一个简单的select组件: ``` <picker mode="selector" range="{{array}}" bindchange="bindPickerChange"> <view class="picker"> 当前选择:{{array[index]}} </view> </picker> ``` 在上述代码中,mode属性设置为"selector",表示这是一个select组件。range属性设置为一个数组array,表示下菜单中的选项列表。bindchange属性设置为一个处理函数bindPickerChange,表示当选择项改变时执行的函数。在select组件内部,我们还可以使用<view>标签来显示当前选择的选项。 在处理函数bindPickerChange中,可以通过event.detail.value获取当前选择的选项的索引值。我们可以根据这个索引值进行相应的操作,比如更新界面显示、发起请求等。 总结而言,微信小程序的select下选择组件是一种实用的界面组件,在我们需要从多个选项中选择一个时非常有用。我们可以通过设置<picker>标签的属性来定义选项,通过处理函数来获取当前选择的选项,并进行相应的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值