u-picker的defaultIndex属性是一次性的,无法在数据变化后动态回显,那么我们可能需要尝试一些其他方法。
一种解决方案是使用v-if条件渲染,确保在数据加载完成后再渲染u-picker组件。这样可以确保defaultIndex在组件首次渲染时生效
<template>
<view>
<u-button @click="loadData">加载数据并打开</u-button>
<u-picker
v-if="show2"
:columns="columns2"
:defaultIndex="defaultIndex"
@cancel="cancel"
@confirm="confirm"
@change="change"
></u-picker>
</view>
</template>
<script>
export default {
data() {
return {
show2: false,
columns2: [],
defaultIndex: [0] // 默认选中第一个选项
};
},
methods: {
loadData() {
// 模拟异步加载数据,实际中可根据实际情况调用接口获取数据
setTimeout(() => {
this.columns2 = [['Option 1', 'Option 2', 'Option 3']];
// 数据加载完成后,设置默认选中项的索引
this.defaultIndex = [1]; // 默认选中第二个选项
this.show2 = true; // 打开u-picker
}, 1000); // 模拟1秒后数据加载完成
},
cancel() {
this.show2 = false;
},
confirm(selectedValues, selectedIndex) {
console.log('Selected Values:', selectedValues);
console.log('Selected Index:', selectedIndex);
this.show2 = false;
},
change(selectedValues, selectedIndex) {
console.log('Changed Values:', selectedValues);
console.log('Changed Index:', selectedIndex);
}
}
};
</script>
u-picker组件通过v-if条件渲染,只有在show2为true时才会渲染。通过在loadData方法中设置show2来确保在数据加载完成后渲染u-picker组件,这样defaultIndex就会生效。