uni-app内置组件picker-view和uni-popup的使用注意事项

本文介绍了uni-app中picker-view组件相比于picker的灵活性,并详细讲解了其结合uni-popup在单列和多列选择场景的应用。在使用picker-view时,需要注意在特定苹果机型上uni-popup可能出现的显示问题以及uni-popup输入框的历史数据遗留问题,并提供了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

picker-view使用

1.picker-view比picker使用更加灵活。以下是picker-view结合uni-popup的使用场景(单列,多列)。

 2.使用方式:

参考说明:uni-app的官方文档   picker-view | uni-app官网

单列使用

<uni-popup ref="noTimeselectDialog" type="dialog"  class="selectDialogBox" :maskClick="false" :isMaskClick="false" :close='NOTIMEcloseUnit'>
	<view  class="selectBox">
		<view class="selectTitle">
			<text class="cancel" @click='NOTIMEcloseUnit'>取消</text>
			<text class="title">{{'选择'+popupTitle}}</text>
			<text class="ok cancel" @click="onClickConfirmUnitNOtime">确定</text>
		</view>
		<picker-view :indicator-style="indicatorStyle" :value="values" @pickstart="pickstart" @pickend="pickend" @change="bindChange" :immediate-change='true' class="picker-view">
			<picker-view-column>
				<view class="item" v-for="(item, index) in unitList" :key="index">{{item.name}}</view>
			</picker-view-column>
		</picker-view>
</uni-popup>

  在使用bindChange方法时会有延迟,可以加上immediate-change=‘true’立即执行


export default {
		data() {
			return {
				unitList:[{id:1,name:'小学'},{id:2,name:'初中'},{id:3,name:'高中'},{id:4,name:'中专'}],
				values:[],//这个是数组
			}
		},
		methods:{
			bindChange(e){
				const val = e.detail.value; //可以得到选择中的下标(map数组)
				this.values=val //如果是单列会得到[0:1],0是单列的下标,1是选择的id
				let id=this.unitList[val[0]].id
				let name=this.unitList[val[0]].name
			
			},
		}
}

this.values=val可以避免组件在滑动使用时会跳到第一个

多列使用

<uni-popup ref="TFselectDialog" type="dialog"  class="selectDialogBox" :maskClick="false" :isMaskClick="false" :close='TFcloseUnit'>
	<view  class="selectBox">
		<view class="selectTitle">
			<text class="cancel" @click='TFcloseUnit'>取消</text>
			<text class="title">{{'选择'+popupTitle}}</text>
			<text class="ok cancel" @click="onClickConfirmUnitTF">确定</text>
		</view>
		<picker-view v-if="popupID=='birthday'" :immediate-change='true' :indicator-style="indicatorStyle" :value="value" @change="bindChange" class="picker-view">
				<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>
</uni-popup>
//参考来自uni-app的picker-view   
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]]
            }
        }
    }

左边的是每列的下标,右边的数字是每列里面的选中的下标。

3.注意事项

1.uni-popup在苹果的某些机型(iPhone X/XR/12/13中)显示里面可以会出现底部往上移。漏出下面的内容。

例图:

解决方法:(来源@走出半生的少年)

 

 

 

2.UNI-popup的输入框点击取消后再次打开有历史数据遗留问题。

<uni-popup ref="inputDialog" type="dialog">
		<uni-popup-dialog ref="inputClose"  mode="input" title="输入内容" :value="ppp"  placeholder="请输入内容" @confirm="dialogInputConfirm"></uni-popup-dialog>
</uni-popup>

实例:

 可能会出现点击取消时,输入框的内容没有清空等情况时。可以通过找到这个输入框的实例里的 val设置为"空"。

this.$refs.inputClose.val=''

引用\[1\]中的代码是关于uni-popupuni-picker-view组件使用示例。这段代码展示了如何创建一个弹出框,并在弹出框中使用picker-view组件来选择单位。在这个示例中,picker-view组件的值是通过bindChange方法来获取的,同时还使用了immediate-change属性来实现立即执行。\[1\] 引用\[2\]提到了一个关于uni-datetime-picker组件在苹果手机上的bug。问题的原因是在scroll-view使用uni-datetime-picker组件。解决办法是将uni-datetime-picker的最外层scroll-view元素改为普通的view,并在最外层view的css中加上overflow-y: scroll。这样可以解决在苹果手机上的显示问题。\[2\] 综上所述,uni-picker-view组件是一个用于选择器的组件,可以在uni-app使用。它可以用于创建各种类型的选择器,如日期选择器、时间选择器等。在使用uni-picker-view组件时,可以通过bindChange方法来获取选择的值,并可以使用immediate-change属性来实现立即执行。同时,需要注意在使用uni-datetime-picker组件时,避免将其放在scroll-view中,以免出现显示问题。 #### 引用[.reference_title] - *1* *3* [uni-app内置组件picker-viewuni-popup使用注意事项](https://blog.csdn.net/m0_60605042/article/details/131010064)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [uniappuni-datetime-picker组件被scroll-view组件遮掩问题](https://blog.csdn.net/qq_51741194/article/details/128254883)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值