首页 > 其他分享 >Vue CLI 系列之(十四)$nextTick

Vue CLI 系列之(十四)$nextTick

时间:2024-02-29 19:56:32浏览次数:24  
标签:nextTick Vue CLI focus input 回调 模板

$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()
  })
}

总结如下:

  1. 语法:this.$nextTick(回调函数)
  2. 作用:在下一次 DOM 更新结束后执行其指定的回调。
  3. 什么时候用:当改变数据后,要基于更新后的新DOM进行某些操作时,要在nextTick所指定的回调函数中执行。

标签:nextTick,Vue,CLI,focus,input,回调,模板
From: https://www.cnblogs.com/wzzzj/p/18040000

相关文章

  • Vue CLI 系列之(十三)消息订阅与发布
    消息订阅与发布【pubsub】1.理解消息订阅与发布2.原理图​ 通过报纸的订阅与发布来理解就是:A去C那订阅了报纸demo,并说明了自己的住址test,由于test是定义在A中的,而A又把test的引用提供出来了,这样C只要一调用test,自动就来到了A这,也就找到了A住的地儿,C发布test报纸时携带的内......
  • Vue CLI 系列之(十二)全局事件总线
    全局事件总线【GlobalEventBus】......
  • Vue CLI 系列之(十一)组件自定义事件
    组件自定义事件区别于js内置事件,内置事件是给html元素用的,而自定义事件是给组件用的1.给组件实例对象绑定自定义事件给组件绑定自定义事件v-on:自定义事件名="回调函数"比如:<Studentv-on:atguigu="demo"/>上面代码的含义为:由于v-on是在Student这个组件标签上,所以是给stu......
  • Vue CLI 系列之(十五)过渡与动画
    过渡与动画Vue封装的过渡与动画1.前置知识CSS3动画【2D转换、3D转换、过渡、动画】参考网站:https://www.runoob.com/css3/css3-animations.html<h1v-show="isShow"id="title">显示了</h1><style> h1{ /*通过animation把"donghua"动画捆绑到h1元素,时长:1......
  • Vue 2x 系列之(十五)过滤器
    过滤器BootCDN:包含了一些免费、优秀的第三方类库官网:https://www.bootcdn.cn/moment.js:js的日期处理类库dayjs:moment.js的轻量化解决方案,API同moment.js完全一致引入dayjs,全局就多了一个dayjs()函数,dayjs()函数默认解析当前时间的时间戳,也可传入时间戳进行解析注:过滤器相对......
  • Vue 2x 系列之(十七)自定义指令
    自定义指令从某种程度上来说,Vue中的自定义指令就是把原生DOM操作进行了一次封装指令是不能脱离元素【标签】存在的定义指令:big使用指令:v-big值的写法:对象【可以处理一些细节上的问题】和函数定义指令可以通过两种方式,函数式和对象式1.函数式指令名(真实DOM元素[element],......
  • Vue 2x 系列之(十六)内置指令
    内置指令我们学过的指令: v-bind :单向绑定解析表达式,可简写为:xxx v-model :双向数据绑定 v-for :遍历数组/对象/字符串 v-on :绑定事件监听,可简写为@ v-if :条件渲染(动态控制节点是否存存在) v-else :条件渲染(动态控制节点是否存存在) v-show :......
  • Vue 2x 系列之(十九)Vue组件化编程
    Vue组件化编程一、对组件的理解什么是组件?组件的定义:​ 实现应用中局部【组件要拆的尽量细致】功能代码【对于前端来说,就是css+html+js】和资源【mp3、mp4、ttf、.zip...】的集合【组件是一个集合】与传统方式编程相比,组件化编程有什么优势?依赖关系不混乱、好维护、代码......
  • Vue 2x 系列之(十八)生命周期
    生命周期[函数]......
  • Vue 2x 系列之(二十)一些注意点
    一些注意点vue基础vue-cli:工程化开发vue-router:在Vue中实现前端路由vuex:应用足够复杂时,用于保管数据element-uivue3Angular==》React==》Vue生命周期函数中的this都是vm开发中自行向vm身上追加属性时【场景:比如methods中要访问mounted钩子中的变量】,避免追加敏感......