Vue-$nextTick

$nextTick

官方文档

vm.$nextTick( callback ) callback Function 延迟回调的执行直到下一次 DOM
更新循环结束。当你改变一些数据之后调用它,当回调触发时 DOM 已经更新完毕。这和全局的 Vue.nextTick 效果相同,只是回调的
this 上下文会自动指向调用此方法的实例。

开发中遇到的问题
当你改变vue中某一组件内数值时、该组件不会立即重新渲染,而是加入事件循环队列,待事件循环队列执行当前时间时开始渲染,而如果你想在DOM更新后做一些操作,就需要使用$nextTick,
否则会发生下面的情况

  <div id="app">
	<div ref="Div1">{{msg}}</div>
	<div v-if="Div2">{{Div2}}</div>
	<div v-if="Div3">{{Div3}}</div>
	<input type="button" value="change" @click="changeDiv"/>
  </div>
  data(){
	  return{
		   msg: '渲染前',
		   Div2:"",
		   Div3:""
	  }  
  },
  methods:{
	  changeDiv(){
		  this.msg = "渲染后"
		  //不使用用nextTick方法直接拿到fDiv的内容会拿到渲染之前的信息
		  //Div2被赋值为渲染前
		  this.Div2=this.$refs.Div1.innerHTML
		  //Div3被赋值为渲染后
		  this.$nextTick(() => {
        this.Div3 = this.$refs.Div1.innerHTML
      })
	  }
  }

在这里插入图片描述

点击按钮
在这里插入图片描述

小结

Vue希望开发人员遵循“数据驱动”的方式,而不是直接操作 DOM,但是有时我们确实要这么做。为了在DOM更新后使用,变化之后的数据,可以在数据变化后用Vue.nextTick(callback)。

  • 在Vue生命周期的created()钩子函数进行的DOM操作一定要放在Vue.nextTick()的回调函数中(created中还未挂载dom)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值