Vue中$nextTick的使用

  • Post author:
  • Post category:vue


Vue渲染是一个异步的渲染,在做添加任务(如下)的时候,Vue不会马上去做渲染,而是在下一个tick的时候做渲染,这个时候要是尝试获取一些dom元素属性的时候,还是获取的数据改变之前的数值,这样子就会出现慢一拍的情况。为了能准确获取到数据改变之后的情况,这时就可以使用Vue中提供的一个api—-$nextTick。

主要思路就是采用微任务优先的方式调用nextTick包装的方法。

this.$nextTick中的箭头函数(回调函数),他会在dom异步渲染完毕的时候执行这个箭头函数,如果将之后的操作放在这个箭头函数中就可以解决问题

如下所示,如果不使用nextick,直接进行添加后获取的length,总是上一次的length长度!

<template>
<div>
	<ul ref="ulRef">
		<li v-for=“(it, i) in item” :key="i">
			{{ it }}
		</li>
	</ul>
	<button @click="add"></button>
</div>
</template>
<script>
export default {
	data()[
		return{
			item:['item1', 'item2', 'item3']
		}
	},
	methods:{
		add(){
			this.item.push(Math.random())
			// 获取子元素个数			
			this.$nextTick(()=>{
				const ulElem = this.$refs.ulRef
				const length = ulElem.childNodes.length
				console.log('length', length)
			})
		}
	}
}
</script>



版权声明:本文为weixin_44684357原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。