在vue项目中引用element-ui时 让el-input 获取焦点的方法

在制做项目的时候遇到一个需求,点击一个按钮弹出一个input输入框,并让输入框得到焦点,项目中引用了ElementUIhtml

在网上查找了不少方法,
可是在实际使用中发现了一个问题
不管是使用$ref获取input元素而后使用focus方法
仍是使用饿了么组件自带的autoFocus
都只有在第一次点击按钮的时候可让Input得到焦点,在不刷新页面的状况下,第二次之后的按钮点击都不会让Input得到焦点。我到如今也没有搞明白这是为何,猜想了一下是存才一个全局变量,当咱们第一次使Input得到焦点之后改变了这个预设变量的值,在Input失去焦点的时候并无将这个值重置,因此致使了后面的问题。
废话很少说,segmentfault

下面是当同时使用Vue和el-input的时候的解决方案。

Vue自己提供了自定义指令的方法code

// 注册一个全局自定义指令 `v-focus`
  Vue.directive('focus', function (el) {
    el.focus()
  })

这样使咱们在组件中能够自用的调用v-focus方法,给他绑定定义布尔变量来控制元素是否得到焦点
可是这里要注意的是组件<el-input>自己在页面中渲染成了一个div元素
因此咱们要在<el-input>被绑定为v-focus的同时
在自定义指令中获取组件下经过querySelector()方法获取input元素htm

&lt;el-input 
  v-model.trim="searchFor" 
  @blur="blurSearchFor"
  v-focus="blurFocus"&gt;
&lt;/el-input&gt;
Vue.directive('focus', function (el) {
  el.querySelector('input').focus()
})

原文地址:https://segmentfault.com/a/1190000014164763get

相关文章
相关标签/搜索