Vue CLI 系列之(十四)$nextTick
$nextTick
$nextTick这也是一个生命周期
如果要实现一个input框点击后进行一些数据修改的操作【这里是指能够引起Vue重新解析模板的数据修改操作,比如修改data中的数据】,然后让该input框获取焦点,该怎么做?
// Item组件中有一个input输入框和一个编辑按钮,实现点击按钮后input框显示并让input框获取焦点
<input
type="text"
:value="thingtitle"
v-show="isEdit"
@keyup.enter="editTodo($event,todo.id)"
ref="testx"
/>
<button v-show="!isEdit" class="btn btn-danger" @click="edit()">编辑</button>
// 事件回调如下
edit(){
// this.isEdit用于控制input框的显示和隐藏
// 当事件的回调函数中进行了数据修改的操作,Vue并不是只要数据发生了改变,就立刻解析模板,
// Vue会在整个回调函数执行完毕后进行模板的重新解析,
// 避免因回调中多次修改数据,对应进行多次模板解析而引起的效率低的问题
this.isEdit = !this.isEdit
// 执行到这儿时模板还没有重新解析,页面上现在input输入框是隐藏的(display:none),
// 对于隐藏的input框调用input输入框的focus()方法获取焦点是无效的
// this.$refs.testx.focus()
// 正确的做法如下
this.$nextTick(function(){
this.$refs.testx.focus()
})
// 开启定时器也是可以实现的,不过定时器是利用了队列的特性。【涉及浏览器的循环模型】
// 而且官方并不推荐这么做
setTimeout(()=>{
this.$refs.testx.focus()
})
}
总结如下:
- 语法:
this.$nextTick(回调函数)
- 作用:在下一次 DOM 更新结束后执行其指定的回调。
- 什么时候用:当改变数据后,要基于更新后的新DOM进行某些操作时,要在nextTick所指定的回调函数中执行。
分类:
Vue / Vue CLI
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix