一个很简单的代替 select 的组件;
这里只实现了弹出、确认时返回选中的选中的对象;
没有实现弹出时显示为第几个,有需要可以自己加;
位置、弹出动画、样式都可以根据自己的需要进行修改;
有问题或者建议可以在评论区回复
<template>
<view class="select_outer" :style="{transform: status ? 'translateY(0)' : 'translateY(100%)'}">
<view class="t">
<text @click="cancel">取消</text>
<text @click="pri_affrim">确认</text>
</view>
<picker-view @change="change" class="picker-view">
<picker-view-column>
<view class="item" v-for="(item,index) in list" :key='index'>{{item[value]}}</view>
</picker-view-column>
</picker-view>
</view>
</template>
<script>
export default {
// 传参示例
// list: [{
// label: '1',
// id: 1
// },{
// label: '2',
// id: 2
// },{
// label: '3',
// id: 3
// },{
// label: '4',
// id: 4
// }],
// value: 'label',
props: {
list: { //数组 选择的列表
},
value: { //字符串 要展示字段的字段名
}
},
data() {
return {
status: false,
index: 0,
}
},
methods: {
change(e){ //滑动时触发
console.log(e);
this.index = e.target.value[0];
},
cancel(){ //取消时触发
this.status = false;
},
pri_affrim() { //确认时触发
this.$emit('affrim', this.list[this.index]);
this.cancel();
},
show() { //父级调用这个方法显示弹出框
this.status = true;
}
},
onLoad() {
console.log('u-select');
}
}
</script>
<style lang="less" scoped>
.select_outer{
position: fixed;
left: 0;
right: 0;
bottom: 0;
z-index: 10;
transition: all .3s;
.t{
background-color: #fff;
display: flex;
padding: 10px 20px;
border-radius: 20px 20px 0 0;
justify-content: space-between;
text:nth-child(1){
color: #ccc;
}
text:nth-child(2){
color: #576b95;
}
}
}
uni-picker-view {
display: block;
background-color: #fff;
}
uni-picker-view .uni-picker-view-wrapper {
display: flex;
position: relative;
overflow: hidden;
height: 100%;
background-color: #fff;
}
uni-picker-view[hidden] {
display: none;
}
picker-view {
width: 100%;
height: 300upx;
}
.item {
line-height: 50upx;
text-align: center;
}
</style>