picker-view.md 5.0 KB
Newer Older
M
mehaotian 已提交
1 2
#### picker-view

W
wanganxp 已提交
3 4 5
嵌入页面的滚动选择器。

相对于`picker`组件,`picker-view`拥有更强的灵活性。当需要对自定义选择的弹出方式和UI表现时,往往需要使用`picker-view`
M
mehaotian 已提交
6 7 8 9 10 11 12

**属性说明**

|属性名|类型|默认值|平台差异说明|
|:-|:-|:-|:-|
|value|Array<Number>|数组中的数字依次表示 picker-view 内的 picker-view-column 选择的第几项(下标从 0 开始),数字大于 picker-view-column 可选项长度时,选择最后一项。||
|indicator-style|String|设置选择器中间选中框的样式||
A
anne-lxm 已提交
13
|indicator-class|String|设置选择器中间选中框的类名,注意页面或组件的style中写了scoped时,需要在类名前写/deep/|app-nvue和字节跳动小程序不支持|
M
mehaotian 已提交
14
|mask-style|String|设置蒙层的样式||
15
|mask-class|String|设置蒙层的类名|app-nvue和字节跳动小程序不支持|
M
mehaotian 已提交
16
|@change|EventHandle|当滚动选择,value 改变时触发 change 事件,event.detail = {value: value};value为数组,表示 picker-view 内的 picker-view-column 当前选择的是第几项(下标从 0 开始)| |
17
|@pickstart|eventhandle||当滚动选择开始时候触发事件|微信小程序2.3.1|
18
|@pickend|eventhandle||当滚动选择结束时候触发事件|微信小程序2.3.1|
M
mehaotian 已提交
19 20 21 22 23

**注意:**其中只可放置 `<picker-view-column/>` 组件,其他节点不会显示。

#### picker-view-column

A
anne-lxm 已提交
24 25 26
`<picker-view />` 的子组件,仅可放置于 `<picker-view />` 中,其子节点的高度会自动设置成与 picker-view 的选中框的高度一致。

**注意:**nvue页面子节点未继承 picker-view 的选中框的高度,需要自己设置高度并居中。
M
mehaotian 已提交
27

雪洛's avatar
雪洛 已提交
28
**示例** [查看演示](https://hellouniapp.dcloud.net.cn/pages/component/picker-view/picker-view)
M
mehaotian 已提交
29

W
wanganxp 已提交
30
以下示例代码,来自于[hello uni-app项目](https://github.com/dcloudio/hello-uniapp),推荐使用HBuilderX,新建uni-app项目,选择hello uni-app模板,可直接体验完整示例。
A
anne-lxm 已提交
31 32


33
```html
W
wanganxp 已提交
34
<!-- 本示例未包含完整css,获取外链css请参考上文,在hello uni-app项目中查看 -->
M
mehaotian 已提交
35 36 37
<template>
    <view>
        <view class="uni-padding-wrap">
A
anne-lxm 已提交
38 39 40
            <view class="uni-title">日期:{{year}}年{{month}}月{{day}}日</view>
        </view>
        <picker-view v-if="visible" :indicator-style="indicatorStyle" :value="value" @change="bindChange" class="picker-view">
M
mehaotian 已提交
41 42 43 44 45 46 47 48 49 50 51 52
            <picker-view-column>
                <view class="item" v-for="(item,index) in years" :key="index">{{item}}年</view>
            </picker-view-column>
            <picker-view-column>
                <view class="item" v-for="(item,index) in months" :key="index">{{item}}月</view>
            </picker-view-column>
            <picker-view-column>
                <view class="item" v-for="(item,index) in days" :key="index">{{item}}日</view>
            </picker-view-column>
        </picker-view>
    </view>
</template>
A
anne-lxm 已提交
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
<script>
    export default {
        data: function () {
            const date = new Date()
            const years = []
            const year = date.getFullYear()
            const months = []
            const month = date.getMonth() + 1
            const days = []
            const day = date.getDate()
            for (let i = 1990; i <= date.getFullYear(); i++) {
                years.push(i)
            }
            for (let i = 1; i <= 12; i++) {
                months.push(i)
            }
            for (let i = 1; i <= 31; i++) {
                days.push(i)
            }
            return {
                title: 'picker-view',
                years,
                year,
                months,
                month,
                days,
                day,
                value: [9999, month - 1, day - 1],
                visible: true,
                indicatorStyle: `height: 50px;`
            }
        },
        methods: {
            bindChange: function (e) {
                const val = e.detail.value
                this.year = this.years[val[0]]
                this.month = this.months[val[1]]
                this.day = this.days[val[2]]
            }
M
mehaotian 已提交
92 93
        }
    }
A
anne-lxm 已提交
94 95
</script>
<style>
A
anne-lxm 已提交
96 97 98 99 100 101
	.picker-view {
		width: 750rpx;
		height: 600rpx;
		margin-top: 20rpx;
	}
	.item {
A
anne-lxm 已提交
102 103 104
		height: 50px;
		align-items: center;
		justify-content: center;
A
anne-lxm 已提交
105 106
		text-align: center;
	}
A
anne-lxm 已提交
107
</style>
A
anne-lxm 已提交
108

M
mehaotian 已提交
109 110
```

雪洛's avatar
雪洛 已提交
111
![uniapp](https://bjetxgzv.cdn.bspapp.com/VKCEYUGU-uni-app-doc/433a97b0-4f30-11eb-b680-7980c8a877b8.png)
M
mehaotian 已提交
112 113

**Tips**
折腾笔记 已提交
114
- 微信小程序端,滚动时在iOS自带振动反馈,可在系统设置 -> 声音与触感 -> 系统触感反馈中关闭
W
wanganxp 已提交
115
- 在2.6.3版本以前,如果需要在PC端使用`picker-view`,需配置[H5模版](https://uniapp.dcloud.io/collocation/manifest?id=h5-template),并引入[touch-emulator.js](https://github.com/dcloudio/touchemulator)
W
wanganxp 已提交
116 117 118

**扩展**
- uni ui提供了增强版`<uni-data-picker>`组件,详见:[https://ext.dcloud.net.cn/plugin?id=3796](https://ext.dcloud.net.cn/plugin?id=3796)