uni-app 5+App中使用picker

uni-app 5+App中使用picker

最近小程序非常火,开发成本低,用完即走等好处使各大厂都开始做小程序,而且大同小异,所以如果我们想使用一套代码开发各家的小程序就可以使用uni-app,还可以做成app,但是uni-app有很多的坑,毕竟还不是很成熟。

编译app时发现picker不能在android和ios正常运行,官方给出的方案是使用mpVue的picker,参考Hello uni-app。我能怎么办,我也很无奈,开启踩坑之旅。

如果只是开发h5+小程序的话请绕道

直接上代码

demo
<template>
	<view>
		<view>
			 <view @tap="showSinglePicker" v-if="shopList.length != 0">门店:{{shopList[index].label}}</view>
			 <mpvue-picker ref="mpvuePicker" :mode="mode" :pickerValueDefault="index" @onChange="onChange" @onConfirm="onConfirm" @onCancel="onCancel" :pickerValueArray="shopList">
			 </mpvue-picker>
		</view>
	</view>
</template>

<script>
	//uni-app的picker不能用于app,
	import mpvuePicker from '../../../components/mpvue-picker/mpvuePicker.vue'
	export default {
		components: {
			mpvuePicker,
		},
		onLoad() {//本段代码请忽略
			let that = this
			uni.getStorage({
				key:'shopList',
				success(res) {
					that.shopList = []
					for(let i = 0; i<res.data.length; i++){
						let obj = {}
						obj.value = res.data[i].shop_id
						obj.label = res.data[i].shop_name
						that.shopList.push(obj)
					}
				}
			})
		},
		data() {
			return {
				shopList:[],
				index:[0],
				mode: 'selector',
			};
		},
		mounted() {
		},
		methods:{
			showPicker() {
			  this.$refs.mpvuePicker.show();
			},
			onConfirm(e) {
				this.index = e.index
			},
			onChange(e) {
			  this.index = e.index
			},
			onCancel(e) {
				console.log('onCancel')
			  console.log(e);
			},
			selectChange(e){
				this.index = e.detail.value
			},
			showSinglePicker() {
				console.log(this.shopList)
				this.mode = 'selector'
				this.index = [0]
				this.$refs.mpvuePicker.show()
			},
		}
	}
</script>

<style>
</style>

mpVue picker
<template>
	<view class="mpvue-picker">
		<page-head :title="title"></page-head>
		<view class="uni-padding-wrap uni-common-mt">
			<view style="uni-title">选中的值 : </view>
			<view class="uni-textarea uni-common-mt">
				<textarea :value="pickerText" disabled placeholder="请点击下面的按钮进行选择"></textarea>
			</view>
			<view class="uni-btn-v">
				<button type="default" @click="showSinglePicker">单列选择</button>
				<button type="default" @click="showMulLinkageTwoPicker">二级联动</button>
				<button type="default" @click="showMulLinkageThreePicker">三级城市联动</button>
			</view>
		</view>
		<mpvue-picker :themeColor="themeColor" ref="mpvuePicker" :mode="mode" :deepLength="deepLength" :pickerValueDefault="pickerValueDefault"
		 @onConfirm="onConfirm" @onCancel="onCancel" :pickerValueArray="pickerValueArray"></mpvue-picker>
		<mpvue-city-picker :themeColor="themeColor" ref="mpvueCityPicker" :pickerValueDefault="cityPickerValueDefault"
		 @onCancel="onCancel" @onConfirm="onConfirm"></mpvue-city-picker>
	</view>
</template>

<script>
	// https://github.com/zhetengbiji/mpvue-picker
	import mpvuePicker from '../../../components/mpvue-picker/mpvuePicker.vue';
	// https://github.com/zhetengbiji/mpvue-citypicker
	import mpvueCityPicker from '../../../components/mpvue-citypicker/mpvueCityPicker.vue'
	import cityData from '../../../common/city.data.js';

	export default {
		components: {
			mpvuePicker,
			mpvueCityPicker
		},
		data() {
			return {
				title : "mpvue-picker 使用示例",
				pickerSingleArray: [{
						label: '中国',
						value: 1
					},
					{
						label: '俄罗斯',
						value: 2
					},
					{
						label: '美国',
						value: 3
					},
					{
						label: '日本',
						value: 4
					}
				],
				mulLinkageTwoPicker: cityData,
				cityPickerValueDefault: [0, 0, 1],
				themeColor: '#007AFF',
				pickerText: '',
				mode: '',
				deepLength: 1,
				pickerValueDefault: [0],
				pickerValueArray:[]
			};
		},
		methods: {
			onCancel(e) {
				console.log(e)
			},
			// 单列
			showSinglePicker() {
				this.pickerValueArray = this.pickerSingleArray
				this.mode = 'selector'
				this.deepLength = 1
				this.pickerValueDefault = [0]
				this.$refs.mpvuePicker.show()
			},
			// 二级联动选择
			showMulLinkageTwoPicker() {
				this.pickerValueArray = this.mulLinkageTwoPicker
				this.mode = 'multiLinkageSelector'
				this.deepLength = 2
				this.pickerValueDefault = [0, 0]
				this.$refs.mpvuePicker.show()
			},
			// 三级联动选择
			showMulLinkageThreePicker() {
				this.$refs.mpvueCityPicker.show()
			},
			onConfirm(e) {
				this.pickerText = JSON.stringify(e)
			}
		},
    onBackPress() {
      if (this.$refs.mpvuePicker.showPicker) {
      	this.$refs.mpvuePicker.pickerCancel();
        return true;
      }
      if (this.$refs.mpvueCityPicker.showPicker) {
      	this.$refs.mpvueCityPicker.pickerCancel();
        return true;
      }
    },
		onUnload() {
			if (this.$refs.mpvuePicker.showPicker) {
				this.$refs.mpvuePicker.pickerCancel()
			}
			if (this.$refs.mpvueCityPicker.showPicker) {
				this.$refs.mpvueCityPicker.pickerCancel()
			}
		}
	};
</script>

<style>
	
</style>
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值