autocomplete中的属性
trigger-on-focus
该属性为 false 的时候,输入框聚焦时不会出现搜索框
clearable
该属性为 true 的时候,可出现清除按钮,可清除输入框内容
问题
在使用 element-ui 中,在 autocomplete 组件中同时添加 clearable 和 :trigger-on-focus="false" ,搜索框清除后,第二次输入内容将不会弹出搜索框,需要失焦后再聚焦 搜索框才能生效
解决方案
方案一:手动调用失焦事件
从 element 的 autocomplete 中可以看出 input的 clear 事件触发后 ,autocomplete 的 activated 属性会被修改,并触发 clear 方法,因此可以从 clear 方法中手动还原autocomplete的状态
组件添加 clear 事件,在 clear 事件中调用
document.activeElement.blur()
调用 document 中 active 元素的失焦事件
方案二:手动调用 autocomplete 中 input 组件的 clear 事件
从 element 的 input 中,清除是调用了 clear 事件,只要我们自定义一个清除按钮,并直接调用 clear 方法,即可模拟 clear,完成清除功能,而且并不会有副作用
先从 input 自带的 suffix 插槽中插入 清除 icon (也可按需求将icon设置为其他icon),点击icon时触发事件执行以下代码
this.$refs.autocomplete.$children[0].clear();
remarks
对于以上插件或第三方库源码的问题,我们应尽量不修改源码去解决问题,在外部通过一些方法来避开bug出现的情况, polyfill 或者 修改源码 的方法或许会发生未知的影响