uni-app 微信小程序使用 input 组件的 <keyboard-accessory> 编译出错
uni-app 微信小程序使用 input 组件的 <keyboard-accessory> 编译出错
操作步骤:
像微信官方文档一样使用input时:https://developers.weixin.qq.com/miniprogram/dev/component/keyboard-accessory.html
编译后input标签中不会包含keyboard-accessory标签。
预期结果:
input标签内应该包含keyboard-accessory标签
实际结果:
keyboard-accessory标签被编译在input标签外
bug描述:
uniapp vue3 vite,微信小程序,input组件使用微信官方提供的keyboard-accessory时,编译成小程序时标签嵌套错误。
信息类别 | 信息内容 |
---|---|
产品分类 | uniapp/小程序/微信 |
PC开发环境 | Windows |
操作系统版本 | Windows 10 专业版 |
HBuilderX类型 | 正式 |
HBuilderX版本 | 4.36 |
工具版本号 | 1.06.2312061 |
基础库版本号 | 3.3.3 |
项目创建方式 | HBuilderX |
更新:
问题已经定位,默认的 input 在 vue 中视为不允许嵌套组件,会导致该问题
感谢反馈,问题已定位,修复进展会同步到这里。
在开发uni-app时,如果遇到在微信小程序中使用<input>
组件的<keyboard-accessory>
标签编译出错的问题,通常是因为<keyboard-accessory>
并不是uni-app官方组件或者标准微信小程序组件。微信小程序原生并不支持<keyboard-accessory>
标签,这可能是导致编译错误的主要原因。
为了解决这个问题,我们通常需要寻找替代方案或者自定义实现类似的功能。以下是一个利用微信小程序的自定义键盘附件功能的示例,通过监听input
组件的focus
和blur
事件来控制一个浮动的键盘附件视图。
首先,确保你的页面结构大致如下:
<template>
<view class="container">
<input
type="text"
@focus="handleFocus"
@blur="handleBlur"
placeholder="请输入内容"
/>
<view v-if="isKeyboardFocused" class="keyboard-accessory">
<button @click="doneClick">完成</button>
</view>
</view>
</template>
接着,在页面的script部分处理focus
和blur
事件,并控制键盘附件的显示:
<script>
export default {
data() {
return {
isKeyboardFocused: false
};
},
methods: {
handleFocus() {
this.isKeyboardFocused = true;
},
handleBlur() {
this.isKeyboardFocused = false;
},
doneClick() {
// 处理完成按钮点击事件,例如关闭键盘或提交输入
console.log('完成按钮被点击');
// 这里可以调用uni-app的API关闭软键盘,例如uni.hideKeyboard()
}
}
};
</script>
最后,添加一些基本的样式来定位键盘附件视图:
<style>
.container {
padding: 20px;
}
.keyboard-accessory {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
background-color: #fff;
border-top: 1px solid #ccc;
display: flex;
justify-content: center;
align-items: center;
padding: 10px;
box-shadow: 0 -1px 5px rgba(0, 0, 0, 0.1);
}
.keyboard-accessory button {
padding: 10px 20px;
background-color: #1aad19;
color: #fff;
border: none;
border-radius: 4px;
}
</style>
以上代码示例展示了如何在uni-app中通过自定义方式实现一个类似键盘附件的功能,从而避免使用不支持的<keyboard-accessory>
标签。这种方法利用了微信小程序的原生事件和样式控制,实现了较为灵活的用户界面交互。