input获取焦点vue_VUE项目中,input二次获取焦点问题

在Vue项目中,实现点击搜索图标显示文本框并获取焦点的功能遇到问题。通过尝试autofocus属性未成功,后采用ref结合Vue.nextTick()在DOM渲染后设置焦点。了解Vue的DOM渲染过程,包括响应式监听、模板编译到vnode、收集依赖及数据变更后的渲染更新流程。
摘要由CSDN通过智能技术生成
54206c3ab22d0d5a8b060bdf04c1f586.gif 9e7aeb02e9e4a31b1283b53af860638a.png b7f04fc354c1f1cea58ff4fc5af2d2bb.png二次获取焦点 dbc34cf24436ff73427b7d2fd57c27c3.png

今天在项目中有个功能,点击搜索icon,则显示文本框并获取焦点

类似于弹窗后获取文本框焦点

功能:

1、点击搜索icon

47e433e9094afcafc1624daf5f9c7f52.png

2、切换input框并获取焦点

e0ae2d30139f9c05afd7298350a744a9.png

如果只需要一次获取焦点只需要在标签加个autofocus属性即可

解决方法:

1、使用ref,操作dom

c9453cb32d74e76f9779e66a3790f383.png

2、this.$refs.gain.focus()

这样发现还是没有效果

和同事讨论一下,猜测可能是dom渲染的先后顺序,于是加了

Vue.nextTick(),延迟50毫秒

0aa2eade240984f57760b09cae8b85a4.png

以上代码就能搞定啦

最后贴上vue中dom的渲染过程

1、响应式监听data属性的getter setter2、模板编译模板到render函数再到vnode。模板不是html,有指令、插值、js表达式,能够实现循环、判断。html是标签语言,只有js才能实现循环判断。因此,模板一定要转化成js,即编译模板。模板编译为render函数、执行render函数返回的vnode3、收集依赖在模板中使用那个变量就把那个变量观察起来(watch),这部分主要实现了从vdom转化为真实DOM、vnode新旧节点的对比操作。

数据更改触发的渲染过程1、初次渲染过程1)解析模板为render函数2)触发响应式,监听data属性的getter、setter3)执行render函数,生成vnode、patch(elem.vnode)2、更新过程1)修改data,触发setter2)重新执行render函数,生成newVnode3)patch(vnode,newVnode)更新视图 

参考:https://www.jianshu.com/p/9e5b89161add(vue中渲染流程分析、归纳及总结)

如果你有更简单的方法,请在下方留言告诉我吧32be46a55a0ace6cbe3583f4d9fc9924.png~~

8302cd00e3c22366eac0526a4192b723.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值