uni-app中uni-data-picker组件bug:当localdata只有一层且readonly为true时,v-model绑定的数据无法选中。
uni-app中uni-data-picker组件bug:当localdata只有一层且readonly为true时,v-model绑定的数据无法选中。
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Mac | 11.6.5 (20G527) | HBuilderX |
操作步骤:
直接使用官网的例子,把dataTree改为单层(没有children),加上readonly属性就能复现。
<template>
<view>
<uni-section title="本地数据" type="line" padding style="height: calc(100vh - 100px);">
<uni-data-picker placeholder="请选择班级" :localdata="dataTree" v-model="classes" readonly="true">
</uni-data-picker>
</uni-section>
</view>
</template>
<script>
export default {
data() {
return {
classes: '1-0',
dataTree: [{
text: "一年级",
value: "1-0"
},
{
text: "二年级",
value: "2-0"
},
{
text: "三年级",
value: "3-0"
}
]
}
}
}
</script>
<style>
</style>
预期结果:
设置readonly="true"时,也能选中
### 实际结果:
设置readonly="true"时,未能选中
bug描述:
uni-data-picker 版本
2.0.1(2024-08-22)
- 修复 uni-app-x v-model 没有更新传入值的 bug
当uni-data-picker本地数据只有一层(没有children)时,将readonly设置为true,则不会选中v-model绑定的数据。
把源码改成图片的逻辑就好了,但是不清楚删掉了逻辑是不是要兼容之前的版本。请code owner帮忙看看。
1 回复
在uni-app中使用uni-data-picker
组件时,如果遇到localdata
只有一层且readonly
为true
时,v-model
绑定的数据无法选中的情况,这通常是由于组件内部处理逻辑的限制或bug导致的。虽然直接修改组件源码不是最佳实践(特别是当使用第三方组件库时),但我们可以尝试通过一些编程技巧来绕过这个问题。
以下是一个可能的解决方案,通过动态调整readonly
属性或者使用其他组件属性来间接实现需求。如果直接修改readonly
属性不可行,可以考虑使用计算属性或者观察者来动态控制组件的行为。
示例代码:
- 模板部分(假设我们在一个Vue组件中使用
uni-data-picker
):
<template>
<view>
<uni-data-picker
v-model="selectedValue"
:localdata="localData"
:readonly="isReadOnly"
@change="handleChange"
/>
<button @click="toggleReadOnly">Toggle Readonly</button>
</view>
</template>
- 脚本部分:
<script>
export default {
data() {
return {
selectedValue: '', // 初始选中的值
localData: ['Option1', 'Option2', 'Option3'], // 本地数据,只有一层
isReadOnlyInitially: true, // 初始的readonly状态
};
},
computed: {
isReadOnly() {
// 根据需要动态计算readonly状态,这里简单使用初始值
return this.isReadOnlyInitially;
},
},
methods: {
handleChange(event) {
console.log('Selected Value:', event.detail.value);
// 处理选中值变化的逻辑
},
toggleReadOnly() {
// 切换readonly状态
this.isReadOnlyInitially = !this.isReadOnlyInitially;
// 如果readonly切换后需要重置选中值,可以在这里处理
// if (!this.isReadOnlyInitially) {
// this.selectedValue = '';
// }
},
},
};
</script>
- 样式部分(可选,根据需求添加):
<style scoped>
/* 添加你的样式 */
</style>
说明:
- 在这个示例中,我们通过
isReadOnlyInitially
数据属性来控制readonly
状态,并通过一个按钮来切换这个状态。 - 当
readonly
为true
时,通常用户无法更改选择,但这里我们通过动态切换来模拟可能的解决方案。 - 如果
readonly
属性确实存在bug,并且上述方法不适用,考虑向uni-app的开发者社区报告此问题,或者寻找是否有官方或社区提供的补丁。
注意:上述代码是一个基本的示例,具体实现可能需要根据实际需求和场景进行调整。