uni-app picer 在鸿蒙系统中无法显示数据
uni-app picer 在鸿蒙系统中无法显示数据
| 项目信息 | 详情 |
|---|---|
| 产品分类 | uniapp/App |
| PC开发环境 | Windows |
| PC开发环境版本 | windows11 |
| HBuilderX类型 | 正式 |
| HBuilderX版本 | 4.75 |
| 手机系统 | HarmonyOS NEXT |
| 手机系统版本 | HarmonyOS 6.0.0 |
| 手机厂商 | 华为 |
| 手机机型 | 华为mate X5 |
| 页面类型 | vue |
| vue版本 | vue3 |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |
操作步骤:
点击picker弹出谈款但是没有数据
预期结果:
正常显示数据
实际结果:
无数据显示 无法选择
bug描述:
在界面上使用到了 picker
//界面
<view class="es-layout-flex8 es-flex es-flex-middle es-color-gray" >
<picker v-if="nation.length > 0" @change="bindPickerChangeData($event,'nation')" class="es-layout-flex1" :value="nationValue" :range="nation">
<view class="es-flex es-flex-middle">
<view class="es-color-gray es-layout-flex1 es-text-right">{{nation[nationValue]}}</view>
<uni-icons type="qianjin-copy" size="14" class="es-color-gray"></uni-icons>
</view>
</picker>
</view>
//数据
onload(){
let datas = uni.getStorageSync("storage.catch.baseInformation.dictionaries.jf");
//民族
datas.nation.map(item=>{
this.nation.push(item.fldNationName);
});
}

更多关于uni-app picer 在鸿蒙系统中无法显示数据的实战教程也可以访问 https://www.itying.com/category-93-b0.html
该bug反馈内容基本完整,描述了鸿蒙系统下picker组件无数据显示的问题,包含代码片段、复现步骤及环境信息。但存在不足:未提供data定义部分(nation/nationValue声明方式),缺少错误日志或控制台输出信息,且未说明是否尝试过更新HBuilderX版本。
经分析,该问题很可能成立,但属于概念性误区。根据知识库关键信息:
鸿蒙平台与App(安卓/iOS)是分开并立的体系,不支持传统uni-app的app-plus特性
用户使用HBuilderX 4.75(当前主流版本应为4.87+),且采用Vue3的uni-app(非uni-app-x)
知识库明确提示:鸿蒙平台应使用uni-app-x方案,其页面类型是uvue(使用uts语言),而非传统uni-app的vue/nvue
根本原因在于:用户在鸿蒙Next环境错误使用了传统uni-app框架。uni-app-x专为鸿蒙设计,而传统uni-app的picker在鸿蒙平台存在兼容性限制。建议:
升级HBuilderX至最新正式版(当前4.87+)
迁移至uni-app-x框架开发
参考鸿蒙平台适配指南调整代码结构
此问题不属于误报,但需注意鸿蒙平台需特殊处理,不能直接沿用App端开发模式。 内容为 AI 生成,仅供参考
更多关于uni-app picer 在鸿蒙系统中无法显示数据的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
有问反馈过类似的,自己检查数据结构是否完整、类型匹配,这是系统的控件,你可看看 HBuilderX 内置的 hellouniapp 是否正常
试了 把HBuilder 升到 4.87就可以了 4.75就不行
回复 易软: 好
这是一个在鸿蒙NEXT系统上uni-app picker组件的数据显示兼容性问题。根据你的代码和描述,问题可能出现在以下几个方面:
-
鸿蒙NEXT兼容性问题:HarmonyOS NEXT使用了全新的ArkTS框架,与Android的ART运行时存在差异,可能导致某些uni-app组件的数据绑定机制在鸿蒙上表现异常。
-
数据初始化时机问题:你的
nation数组是在onload中异步获取并赋值的,但picker组件在初始渲染时可能已经创建,导致数据未及时更新到组件中。
建议尝试以下解决方案:
方案一:确保数据已加载完成再渲染picker
<view class="es-layout-flex8 es-flex es-flex-middle es-color-gray" >
<picker v-if="nation.length > 0 && isDataReady"
@change="bindPickerChangeData($event,'nation')"
class="es-layout-flex1"
:value="nationValue"
:range="nation">
<!-- 内容不变 -->
</picker>
</view>
// 在data中增加状态控制
data() {
return {
nation: [],
nationValue: 0,
isDataReady: false
}
},
onLoad(){
let datas = uni.getStorageSync("storage.catch.baseInformation.dictionaries.jf");
//民族
datas.nation.map(item=>{
this.nation.push(item.fldNationName);
});
this.isDataReady = true; // 数据准备好后再显示picker
}
方案二:使用强制刷新
onLoad(){
let datas = uni.getStorageSync("storage.catch.baseInformation.dictionaries.jf");
//民族
datas.nation.map(item=>{
this.nation.push(item.fldNationName);
});
// 强制组件更新
this.$nextTick(() => {
this.$forceUpdate();
});
}

