uni-app 微信小程序使用 input 组件的 <keyboard-accessory> 编译出错

发布于 1周前 作者 songsunli 来自 Uni-App

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

Image 1
Image 2


2 回复

更新: 问题已经定位,默认的 input 在 vue 中视为不允许嵌套组件,会导致该问题
感谢反馈,问题已定位,修复进展会同步到这里。


在开发uni-app时,如果遇到在微信小程序中使用<input>组件的<keyboard-accessory>标签编译出错的问题,通常是因为<keyboard-accessory>并不是uni-app官方组件或者标准微信小程序组件。微信小程序原生并不支持<keyboard-accessory>标签,这可能是导致编译错误的主要原因。

为了解决这个问题,我们通常需要寻找替代方案或者自定义实现类似的功能。以下是一个利用微信小程序的自定义键盘附件功能的示例,通过监听input组件的focusblur事件来控制一个浮动的键盘附件视图。

首先,确保你的页面结构大致如下:

<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部分处理focusblur事件,并控制键盘附件的显示:

<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>标签。这种方法利用了微信小程序的原生事件和样式控制,实现了较为灵活的用户界面交互。

回到顶部