问题:组件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了。