uni-app 微信小程序(安卓端)带个性化参数 picker不能正常弹出
uni-app 微信小程序(安卓端)带个性化参数 picker不能正常弹出
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | Win7家庭 Service Pack 1 | HBuilderX |
操作步骤:
PickerChange($event, ‘BackgroundMusicFolder’) 我在这里多传了一个个性参数,所以把$event参数也一并带上了,不然我检测发现触发事件如有个性参数则不会带上event参数了
预期结果:
代码均严格按照原生APP方式来实施 生成的APP、H5以及微信小程序(IOS)均能正常调取picker 但在微信小程序(华为鸿蒙系统端)及微信小程序开发者工具都调取失败
实际结果:
但在微信小程序(华为鸿蒙系统端)及微信小程序开发者工具都调取失败
bug描述:
页面片段
<view class="uni-flex uni-row border-bottom h50">
<view><text class="font1">背景音乐:</text></view>
<view class="uni-flex-item">
<picker name="BackgroundMusicFolder" mode="selector" :value="SelectBackgroundMusicFolderIndex" :range="BackgroundMusicFolder" range-key="name" @change="PickerChange($event, 'BackgroundMusicFolder')">
<view class="uni-input">{{BackgroundMusicFolder[SelectBackgroundMusicFolderIndex].name}}</view>
</picker>
</view>
</view>
页面data片段:
BackgroundMusicFolder:[{name:'喝酒顺口溜', value:'2/0'},{name:' 搞笑段子', value:'3/0'},{name:'动感音乐', value:'4/0'},{name:'劲爆舞曲', value:'5/0'},{name:'酒文化知识', value:'6/0'}],
SelectBackgroundMusicFolderIndex:0,
页面方法片段:
//通用设置变量选取值事件
//通用选择事件
,PickerChange:function(e, SourceName, SelectIndexName){
if (typeof SourceName=="string" && typeof this[SourceName]=="object" && this[SourceName].length!=undefined)
{
var SelectIndexName = SelectIndexName || "Select"+ SourceName +"Index";
if (typeof this[SelectIndexName]==undefined){console.log("Picker "+ SourceName + "Not Set SelectIndex");return false;}
if (typeof e!="object" || e.detail==undefined || e.detail.value==undefined){console.log("Picker Not Set Event Parameter");return false;}
this[SelectIndexName] = e.detail.value;
}
else
{
console.log("Picker Not Set SourceName");return false;
}
}
生成的APP、H5以及微信小程序(IOS)均能正常调取picker
但在微信小程序(华为鸿蒙系统端)及微信小程序开发者工具都调取失败
更多关于uni-app 微信小程序(安卓端)带个性化参数 picker不能正常弹出的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于uni-app 微信小程序(安卓端)带个性化参数 picker不能正常弹出的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这个问题是由于微信小程序的事件处理机制与uni-app其他平台存在差异导致的。
核心原因:
在微信小程序中,当你在@change事件中传递自定义参数时,$event参数会被覆盖,导致无法正确获取picker的选中值。而在iOS端和H5端,uni-app框架做了兼容处理,能够正常获取事件对象。
解决方案:
- 推荐方案:使用事件对象获取自定义参数
// 修改事件绑定,只传递$event
@change="PickerChange"
// 修改事件处理方法
PickerChange: function(e) {
// 通过currentTarget.dataset获取自定义参数
const sourceName = e.currentTarget.dataset.sourceName;
if (typeof sourceName == "string" && typeof this[sourceName] == "object") {
const selectIndexName = "Select" + sourceName + "Index";
if (typeof this[selectIndexName] == undefined) {
console.log("Picker Not Set SelectIndex");
return false;
}
if (typeof e != "object" || e.detail == undefined || e.detail.value == undefined) {
console.log("Picker Not Set Event Parameter");
return false;
}
this[selectIndexName] = e.detail.value;
}
}
- 修改模板,添加data属性:
<picker
name="BackgroundMusicFolder"
mode="selector"
:value="SelectBackgroundMusicFolderIndex"
:range="BackgroundMusicFolder"
range-key="name"
data-source-name="BackgroundMusicFolder"
@change="PickerChange">
<view class="uni-input">{{BackgroundMusicFolder[SelectBackgroundMusicFolderIndex].name}}</view>
</picker>

