在制造项目的时刻碰到一个需求,点击一个按钮弹出一个input输入框,并让输入框取得核心,项目中引用了element-ui
在网上查找了许多要领,
然则在实际运用中发现了一个题目
无论是运用$ref猎取input元素然后运用focus要领
照样运用饿了么组件自带的autoFocus
都只要在第一次点击按钮的时刻能够让Input取得核心,在不革新页面的情况下,第二次今后的按钮点击都不会让Input取得核心。我到现在也没有搞邃晓这是为何,猜想了一下是存才一个全局变量,当我们第一次使Input取得核心今后改变了这个预设变量的值,在Input落空核心的时刻并没有将这个值重置,所以致使了背面的题目。
空话不多说,
下面是当同时运用Vue和el-input的时刻的解决方案。
Vue自身供应了自定义指令的要领
// 注册一个全局自定义指令 `v-focus`
Vue.directive('focus', function (el) {
el.focus()
})
如许使我们在组件中能够自用的挪用v-focus要领,给他绑定定义布尔变量来掌握元素是不是取得核心
然则这里要注意的是组件<el-input>自身在页面中衬着成了一个div元素
所以我们要在<el-input>被绑定为v-focus的同时
在自定义指令中猎取组件下经由过程querySelector()要领猎取input元素
<el-input
v-model.trim="searchFor"
@blur="blurSearchFor"
v-focus="blurFocus">
</el-input>
Vue.directive('focus', function (el) {
el.querySelector('input').focus()
})