帮我封装一个原生微信小程序的下拉选择器,类似element-ui的el-select组件
时间: 2024-02-16 13:03:25 浏览: 195
好的,下面是一个简单的封装示例:
1. 在 `components` 目录下新建一个 `select` 目录,然后在 `select` 目录下新建两个文件 `select.wxml` 和 `select.js`。
2. 在 `select.wxml` 文件中编写下拉选择器的模板代码,示例如下:
```
<view class="el-select" bindtap="onSelectTap">
<view class="el-select__input">
<input type="text" class="el-select__inner" placeholder="{{placeholder}}" disabled="{{disabled}}" value="{{selectedText}}">
<i class="el-select__caret el-icon-arrow-down"></i>
</view>
<view class="el-select-dropdown" hidden="{{!showDropdown}}" catchtouchmove="catchTouchMove">
<scroll-view scroll-y="{{true}}" class="el-select-dropdown__list">
<view class="el-select-dropdown__item" wx:for="{{options}}" wx:key="{{item.value}}" bindtap="onOptionTap" data-value="{{item.value}}">
{{item.label}}
</view>
</scroll-view>
</view>
</view>
```
其中,`placeholder` 表示选择器的占位符,`disabled` 表示选择器是否禁用,`selectedText` 表示当前选中的文本,`showDropdown` 表示下拉框是否显示,`options` 表示下拉框的选项列表。
3. 在 `select.js` 文件中编写组件的逻辑代码,示例如下:
```
Component({
properties: {
options: {
type: Array,
value: []
},
placeholder: {
type: String,
value: ''
},
disabled: {
type: Boolean,
value: false
},
value: {
type: [String, Number],
value: '',
observer: 'onValueChange'
}
},
data: {
selectedValue: '',
selectedText: '',
showDropdown: false
},
methods: {
onValueChange: function(newVal) {
var options = this.data.options;
var selectedItem = options.find(function(item) {
return item.value == newVal;
});
if (selectedItem) {
this.setData({
selectedValue: selectedItem.value,
selectedText: selectedItem.label
});
}
},
onSelectTap: function() {
if (this.data.disabled) {
return;
}
this.setData({
showDropdown: !this.data.showDropdown
});
},
onOptionTap: function(event) {
var value = event.currentTarget.dataset.value;
this.setData({
selectedValue: value,
selectedText: this.data.options.find(function(item) {
return item.value == value;
}).label,
showDropdown: false
});
this.triggerEvent('change', { value: value });
},
catchTouchMove: function() {
// 阻止滚动穿透
}
}
});
```
其中,`options` 表示下拉框的选项列表,`placeholder` 表示选择器的占位符,`disabled` 表示选择器是否禁用,`value` 表示当前选中的值,`selectedValue` 表示当前选中的值,`selectedText` 表示当前选中的文本,`showDropdown` 表示下拉框是否显示。
4. 在需要使用下拉选择器的页面中,引入 `select` 组件并传入相关参数,示例如下:
```
<import src="../../components/select/select.wxml" />
<template is="select" data="{{ options: options, placeholder: '请选择', value: value }}" />
```
其中,`options` 表示下拉框的选项列表,`placeholder` 表示选择器的占位符,`value` 表示当前选中的值。
5. 在需要监听选择器值改变的页面中,使用 `bind:change` 绑定事件即可,示例如下:
```
<import src="../../components/select/select.wxml" />
<view class="page">
<template is="select" data="{{ options: options, placeholder: '请选择', value: value }}" bind:change="onSelectChange" />
</view>
```
其中,`onSelectChange` 表示选择器值改变时触发的事件处理函数。
这只是一个简单的示例,如果需要更多功能可以根据实际需求进行扩展。
阅读全文