uniapp滚动选择器 picker

本文介绍了底部弹起的滚动选择器picker,支持五种模式(selector,multiSelector,time,date,region),并详细讲解了不同模式下的属性设置和事件触发。

从底部弹起的滚动选择器 picker

支持五种选择器, 通过mode来区分, 分别是普通选择器(selector), 多列选择器(multiSelector), 时间选择器(time), 日期选择器(date), 省区选择器(region), 默认是普通选择器

一. 普通选择器(selector)

mode = selector

属性:

range(Array/Array): mode为selector或multiSelector时, range有效

range-key: 当range是一个Array时, 通过range-key来指定Object中key的值作为选择器显示内容

value: value的值表示选择了range中的第几个(下标从0开始)

@change: value改变时触发change事件

disabled: 是否禁用

@cancel: 取消选择或点遮罩层收起picker时触发

<view>
    <picker mode="selector" :range="array" @change="picker1" :value="index">
        <view>{{array[index]}}</view>
    </picker>
</view>
export default {
    data() {
        return {
            array:['张三','李四','王五'],
            index:0
        }
    },
    methods: {
        picker1(e){
            console.log(e)
            this.index = e.detail.value
        }
    }
}

二. 多列选择器(multiSelector)

model = multiSelector

属性

range(二维Array/二维Array): mode为selector或multiSelector时, range有效. 二维数组长度表示多少列, 数组的每项表示每列的数据.

range-key: 当range是一个二维Array时, 通过range-key来指定Object中key的值作为选择器显示内容

value(Array): value每一项的值表示选择了range对应项中的第几个(下标从0开始)

@change: value改变时触发change事件.

@columnchange: 某一列的值改变时触发columnchange事件, event.detail = {column:column,value:value}, column的值表示改变了第几列(下标从0开始), value的值表示变更值的下标

cancel: 取消选择时触发

disabled: 是否禁用

<view class="">
    2.多列选择器:
</view>
<picker mode="multiSelector" :range="array1" @change="picker2" :value='value'>
    <view>姓名: {{array1[0][value[0]]}} 性别:{{array1[1][value[1]]}}</view>
</picker>
export default {
    data() {
        return {
            array1:[['张三', '李四','王五'],['女','男']],
            value:[0,0]
        }
    },
    methods: {
        picker2(e){
            console.log(e.detail.value)
            this.value = e.detail.value
        }
    }
}

### UniApp 滚动选择器实现方法与使用教程 在 UniApp 中,滚动选择器Picker)是一个常用的交互组件,用于提供用户选择特定值的功能。以下是关于滚动选择器的实现方式和使用方法的详细介绍。 #### 1. 基础单列选择器 单列选择器是最简单的滚动选择器形式,允许用户从一个列表中选择一个值。以下是一个基础示例代码[^1]: ```html <view> <picker mode="selector" :range="array" @change="picker1" :value="index"> <view>{{ array[index] }}</view> </picker> </view> ``` ```javascript export default { data() { return { array: ['张三', '李四', '王五'], // 数据源 index: 0, // 当前选中的索引 }; }, methods: { picker1(e) { console.log(e); // 打印事件对象 this.index = e.detail.value; // 更新选中索引 }, }, }; ``` 上述代码中,`mode="selector"` 表示单列选择模式,`:range="array"` 定义了可选项的数据源,`@change="picker1"` 是当用户选择后触发的回调函数[^1]。 --- #### 2. 多列选择器 多列选择器允许多个列同时滚动,通常用于日期、时间或组合选项的选择。以下是一个多列选择器的示例代码[^2]: ```html <view class="new-date-pick"> <picker mode="multiSelector" :range="columns" @change="multiPickerChange" @columnchange="multiPickerColumnChange" :value="multiIndex"> <view class="lineStyle">{{ formatMultiSelectorValue(columns, multiIndex) }}</view> </picker> </view> ``` ```javascript export default { data() { return { columns: [['2023', '2024', '2025'], ['1月', '2月', '3月'], ['1日', '2日', '3日']], // 多列数据源 multiIndex: [0, 0, 0], // 初始选中值 }; }, methods: { multiPickerChange(e) { this.multiIndex = e.detail.value; // 更新选中值 }, multiPickerColumnChange(e) { const { column, value } = e.detail; this.$set(this.multiIndex, column, value); // 动态更新某一列的值 }, formatMultiSelectorValue(columns, index) { return `${columns[0][index[0]]} ${columns[1][index[1]]} ${columns[2][index[2]]}`; // 格式化显示内容 }, }, }; ``` 在此示例中,`mode="multiSelector"` 表示多列选择模式,`:range="columns"` 定义了多列数据源,`@columnchange="multiPickerColumnChange"` 用于监听某一列的变化并动态调整其他列的值[^2]。 --- #### 3. 自定义样式与功能扩展 为了提升用户体验,可以对滚动选择器进行样式自定义和功能扩展。例如,通过 `itemHeight` 和 `labelKey` 属性调整每一项的高度和字段名[^3]。以下是一个自定义样式的示例: ```css .lineStyle { font-size: 34rpx; } .confirmBtn { color: #C8000B; } .new-date-pick { position: relative; } .new-date-pick-col { background-color: rgba(107, 187, 251, 0.23); color: #3A91FF; } .new-date-pick-col-text { color: #3A91FF; font-weight: 400; } ``` 通过自定义样式,可以改变滚动选择器的外观,使其更符合应用的整体设计风格。 --- #### 4. 封装滚动选择器组件 为了提高代码复用性,可以将滚动选择器封装为独立组件。以下是一个简单的封装示例: ```html <template> <picker :mode="mode" :range="columns" @change="onChange" :value="value" :item-height="itemHeight" :label-key="labelKey"> <slot></slot> </picker> </template> <script> export default { props: { mode: { type: String, default: 'selector', }, columns: { type: Array, required: true, }, value: { type: Array, default: () => [], }, itemHeight: { type: Number, default: 44, }, labelKey: { type: String, default: 'text', }, }, methods: { onChange(e) { this.$emit('change', e.detail.value); }, }, }; </script> ``` 封装后的组件可以通过传递参数灵活配置滚动选择器的行为和外观[^3]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值