博主最近在使用uniapp做一个微信小程序,要使用到picker UI组件,原先是使用vant的,但由于在created组件的时候使用云函数异步获取picker内的数据,最终导致展示不了,真的无语,如果是使用本地数据就没问题,于是就去找其他UI,用了很多,各种问题,最终使用了微信原生的组件,可能很多人要问我为什么不使用picker而要用picker-view,是因为。。picker的字体太小了,这微信,上网查也说改不了,于是只能用picker-view,下面进入正文

  1. picker-view的遮罩层

这个真的无语。。,居然没有,于是只能自己做一个,也不是很难,加入一个view(div),设置display:fixed脱离文档流,高度宽度全屏,透明度和背景颜色设置起来,再加上v-show和相关的事件:点击遮罩层后可以隐藏picker-view

<view class="staorder-overlay" v-show="isSelectTime" @click="changeIsSelect"></view>

//css

.staorder-overlay{
		width: 100vw;
		height: 100vh;
		position: fixed;
		z-index: 13;
		top: 0;
		left: 0;
		background-color: #989898;
		opacity:0.5;
	}

2.picker-view的展示

这个也是,一言难尽,要设置对应的高度宽度才能展示出来,然后text-align将picker-view-column居中展示

<picker-view v-if="isSelectTime" class="staorder-pickview" @change="changeSelectTime">
			
	<picker-view-column class="staorder-pickcolumn">
		<view class="staorder-pickcolumn" v-for="(item,index) in timeGroup[0].values" 
         :key="index">{{item}}年</view>
	</picker-view-column>
			
    <picker-view-column class="staorder-pickcolumn">
	    <view class="staorder-pickcolumn" v-for="(item,index) in timeGroup[1].values" 
         :key="index">{{item}}月</view>
    </picker-view-column>
				
</picker-view>


.staorder-pickview{
		width: 100vw;
		height: 35vh;
		position: fixed;
		bottom: 0;
		left: 0;
		right: 0;
		background-color: white;
		z-index: 100;
		text-align: center;
	}

3.picker-view中的标题

这个。。,微信的产品经理出来挨打,picker-view中的元素貌似只能以列来展示。。

没办法,只能还是像前面遮罩层那样子,position大法

<view v-show="isSelectTime" class="staorder-picktitle">选择时间</view>

.staorder-picktitle{
		/* width: 100vw;
		height: 69rpx;
		padding: 35rpx;
		text-align: center; */
		position: fixed;
		bottom: 30vh;
		left: 41vw;
		right: 41vw;
		color: black !important;
		z-index: 119 !important;
	}

注释中的内容是我失败的尝试,哈哈哈哈哈哈我裂了

4.监听picker-view内的变化

这个好像。。,它原生api中的bindchange,不起作用,无论是:还是@还是原生,都不行!!

所以,直接@change,会返回一个事件对象,里面的detail.value就是数据的索引,也就是bindchange中返回的内容,具体去看他的文档

<picker-view v-if="isSelectTime" class="staorder-pickview" @change="changeSelectTime">

changeSelectTime(e) {
	console.log(e.target.value)
	let i=e.target.value[0]
	if(i!=this.nowYearIndex){
		this.nowYearIndex=i
		this.timeGroup[1].values=this.timeTotal[this.timeGroup[0].values[i]]
		console.log(this.timeGroup)
	}
	let j=e.target.value[1]
	this.staTime = this.timeGroup[0].values[i] + '年' + this.timeGroup[1].values[j] + '月'
	console.log(this.staTime)
				// if (this.staTime == '') {
				// 	this.staTime = this.timeGroup[0]
				// }
				// this.isSelectTime = !this.isSelectTime
	},

5.级联picker-view中的数据

在data中设置一个变量记录值,手动监听。。,然后修改下一列的值,如上事件中if中的内容

真的大无语,手动把一个啥也没的picker-view变成封装好的picker组件

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐