环境:vue3,vant4
背景:Picker 作为用于辅助表单填写,搭配 Popup 和 Field 。页面需要给picker设置默认值,city为温州,但是在popup弹出时,picker没有选中温州这个选项,还时停留在杭州。
解决方案:
看了很多解决方案,设置default-indexset ,ColumnIndex。都尝试了,还是不行。而且这些方法,其实在vant4文档中,根本没有写。
很奇怪,后来想到了解决方案。
我设置了van-field的v-model,其实只改变了外部的值。
let formData = reactive({city:'温州'});
popup弹出时,picker的值其实没有改变,需要在van-picker上绑定v-model,设置初始值即可。van-data-picker, 也可以通过这种方式设置(亲测)
<van-popup v-model:show="showPicker" round position="bottom">
<van-picker
:columns="columns"
@cancel="showPicker = false"
@confirm="onConfirm"
v-model="defaultCity"
/>
</van-popup>
const defaultCity = ref(['Wenzhou'])
具体完整代码如下:
<template>
<van-cell-group>
<van-field
v-model="formData.city"
is-link
readonly
label="城市"
placeholder="选择城市"
@click="showPicker = true"
/>
<van-popup v-model:show="showPicker" round position="bottom">
<van-picker
:columns="columns"
@cancel="showPicker = false"
@confirm="onConfirm"
v-model="defaultCity"
/>
</van-popup>
</van-cell-group>
</template>
<script setup> import { ref } from 'vue'; const columns = [ { text: '杭州', value: 'Hangzhou' }, { text: '宁波', value: 'Ningbo' }, { text: '温州', value: 'Wenzhou' }, { text: '绍兴', value: 'Shaoxing' }, { text: '湖州', value: 'Huzhou' }, ]; let formData = reactive({city:'温州'}); const defaultCity = ref(['Wenzhou']); const showPicker = ref(false); const onConfirm = ({ selectedOptions }) => { showPicker.value = false; formData.city = selectedOptions[0].text; }; </script>