Vue实战056:input框自动获取焦点

2024-10-12 08:52:19

1、比较简单的方法就是通过watch监听对话框属性,当对话框显示时box属性为true,这是我们通过refs属性来定位DOM元素并对元素进行focus操辑湃形傥作,由于这里我们用的是Element组件,所以获取元素的时候需要注意实际操作的DOM元素在该元素的子元素中。watch:{ box(){ if(this.box==true){ this.$refs.input.$refs.input.focus() } }},

Vue实战056:input框自动获取焦点

3、除了这种方法我们也可以使用Vue中的directive属性,实现自定义自动获取焦点功能指令。directive为指令定义提供几个钩子函数 (们倪玺骋均为可选):bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)。componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。unbind:只调用一次,指令与元素解绑时调用。

Vue实战056:input框自动获取焦点

5、这里需要注意的是el.children[0],因为element渲染后结构是div包着input,focus()在div是没有任何效果的。在需要使用的标签中引用我们的自定义指令focus,这里我在el-input元素中添加了v-focus指令,这样当我点击锁屏图标时鼠标就会自动聚焦到input输入框中了。

Vue实战056:input框自动获取焦点

7、到这里我们就实现了input框自动获取焦点的功能,但是只能在局部页面使用,如果用到的地方多的话我们可以进行全局注册,这样不管哪里都可以使用该指令了。全局注册在main.js中定义directive属性,调用的函数同样为inserted和update。

Vue实战056:input框自动获取焦点
猜你喜欢