Ant Design a-popover组件内有input组件输入中文时自动消失问题

821 阅读1分钟

问题:组件A是a-popover,组件B是包含输入框input等内容,A包含B,当弹出a-popover后在输入框输入中文时,a-popover自动消失了。 解决方案: 在input组件上添加事件compositionstart、compositionend,在这两个事件里向父组件传递一个事件

<a-input
    @compositionstart="onCompositionstart"
    @compositionend="onCompositionend"
/>

function onCompositionstart(e) {
    this.$emit('changeApplistPopoverTrigger', true);
}

function onCompositionend(e) {
    this.$emit('changeApplistPopoverTrigger', false);
}

父组件接收方法后,设置a-popover的trigger类型即可

function changeApplistPopoverTrigger(e) {
    if (e == true) {
        state.applistTrigger = "click";
    }else {
        state.applistTrigger = "hover";
    }
}

主要就是一个取巧思路,因为a-popovertrigger属性是click时,就不会被输入框的中文输入所影响而自动消失(<a-popover v-model:open="visible"/>open属性会在输入框输入中文时变为false,可自行打印验证)。

当用户使用拼音输入法开始输入汉字时,compositionstart事件就会被触发。当文本段落的组成完成或取消时, compositionend 事件将被触发。 再借助这两个事件,去设置a-popover的trigger类型就可以解决这个bug了。