uni-app picker-view组件多列选择时数据发生改变视图不更新
uni-app picker-view组件多列选择时数据发生改变视图不更新
类别 | 信息 |
---|---|
产品分类 | uniapp/小程序/阿里 |
操作系统 | Mac |
操作系统版本 | 12.0.1 |
开发工具 | HBuilderX |
工具版本 | 4.26 |
第三方工具 | 3.9.7 |
基础库 | 2.9.30 |
项目创建方式 | HBuilderX |
示例代码:
<picker-view class="h-[30vh]" :value="modelValue" @change="bindChange">
<picker-view-column>
<view v-for="(option, i) in columnDay" :key="i" class="flex items-center justify-center">
<slot name="default" :option="option" :index="i">
{{ option }}
</slot>
</view>
</picker-view-column>
<picker-view-column>
<view v-for="(option, i) in columnHour" :key="i" class="flex items-center justify-center">
<slot name="default" :option="option" :index="i">
{{ option }}
</slot>
</view>
</picker-view-column>
</picker-view>
操作步骤:
多列选择器,当第一列选中的值发生变化的时候,修改第二列的数据。
预期结果:
数据发生变化 更新视图。
实际结果:
无。
bug描述:
《picker-view》组件多列选择。当设置联动时,第二列的数据已经发生了改变,但是picker-view第二列视图没有发生变化。下方的columnHour已经监听到数据变化,但是视图不更新。
更多关于uni-app picker-view组件多列选择时数据发生改变视图不更新的实战教程也可以访问 https://www.itying.com/category-93-b0.html
把key换一个其他不重复的变量 试试 不要用索引 i
更多关于uni-app picker-view组件多列选择时数据发生改变视图不更新的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在uni-app中使用picker-view
组件进行多列选择时,如果遇到数据发生改变但视图不更新的问题,通常是因为数据绑定或状态管理没有正确处理。这里,我将提供一个简单的代码示例,展示如何在数据改变后正确更新picker-view
的视图。
首先,确保你的picker-view
组件的value
属性和range
属性正确绑定到组件的数据上。value
属性表示当前选中的值,range
属性表示每一列的可选项。
<template>
<view>
<picker-view :value="pickerValue" :range="pickerRanges" @change="onPickerChange">
<view v-for="(column, columnIndex) in pickerRanges" :key="columnIndex" class="picker-column">
<view v-for="(item, rowIndex) in column" :key="rowIndex" class="picker-item">{{ item }}</view>
</view>
</picker-view>
<button @click="updatePickerData">更新数据</button>
</view>
</template>
<script>
export default {
data() {
return {
pickerValue: [0, 0], // 初始选中值
pickerRanges: [
['选项1-1', '选项1-2'], // 第一列选项
['选项2-1', '选项2-2', '选项2-3'] // 第二列选项
]
};
},
methods: {
onPickerChange(e) {
this.pickerValue = e.mp.detail.value;
console.log('选中的值:', this.pickerValue);
},
updatePickerData() {
// 模拟数据更新
this.pickerRanges = [
['新选项1-1', '新选项1-2'], // 更新后的第一列选项
['新选项2-1', '新选项2-2', '新选项2-3', '新选项2-4'] // 更新后的第二列选项
];
// 如果更新后需要重置选中值,可以重新设置pickerValue
// this.pickerValue = [0, 0]; // 重置为第一行第一列
}
}
};
</script>
<style>
.picker-column {
display: flex;
flex-direction: column;
}
.picker-item {
text-align: center;
padding: 10px;
}
</style>
在这个示例中,pickerValue
保存了当前选中的值,pickerRanges
是一个二维数组,表示每列的可选项。当点击“更新数据”按钮时,updatePickerData
方法会更新pickerRanges
的值,从而触发picker-view
的重新渲染。
注意,如果更新数据后需要重置选中的值,可以在updatePickerData
方法中重新设置pickerValue
。如果不重置,pickerValue
将保持更新前的索引,这可能会导致视图显示不一致。
通过这种方式,你可以确保在数据发生改变时,picker-view
的视图能够正确更新。