vue nexttick用法
Tick是Vue.js提供的一个方法,可以在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,可以获取更新后的DOM,并进行一些操作。
使用方法:
在Vue组件内部使用Tick方法,方法中传入一个回调函数即可。回调函数会在下次DOM更新结束之后执行。
Tick(() => {
some code here
})
Tick同时也支持Promise的异步函数调用方式。可以使用async/await来简化代码。
async someMethod () {
code here
Tick()
code here
}
Tick方法的使用场景多种多样,常用的场景如下:
1.修改数据后立即使用DOM更新之后的信息。
由于Vue的数据响应式,在修改数据后,DOM并不会立即更新。如果想要立即拿到更新后的DOM信息,需要使用Tick方法。
例如:我们将一个列表中的元素从第一个位置移动到最后一个位置,并想立即获取这个更新后的DOM位置信息。代码如下:
let list = fs.list 通过ref获取列表标签
let firstElem = veChild(list.childNodes[0]) 移除第一个节点
list.appendChild(firstElem) 将移除的节点添加到最后
Tick(() => {
获取更新后的DOM信息
let lastElem = list.childNodes[list.childNodes.length - 1]
console.log(lastElem.offsetTop)
})
2.在用v-for循环渲染数据的时候,获取DOM列表信息。
使用v-for指令循环渲染数据时,如果想要获取每一个子元素的DOM信息,需要使用Tick方法来获取更新后的DOM信息。
例如:
<template>
<ul ref="list">
<li v-for="(item, index) in list" :key="index">{{item}}</li>
</ul>
</template>
<script>
export default {
data() {
return {
list: ['a', 'b', 'c']
}
},
methods: {
handleList() {
let arr = []
循环获取每一个li元素的offsetTop属性值
for (let i = 0; i < this.list.length; i++) {
let li = fs.list.childNodes[i]
arr.push(li.offsetTop)
}
console.log(arr)
}
}
}
</script>
上述代码中,handleList方法可以获取到每个li元素的offsetTop属性值。
3.在el表达式中获取更新后的DOM信息。
await和async使用方法在Vue中,可以使用{{}}语法来表示el表达式,可以在el表达式中插入下一次DOM更新完毕后的信息。
例如:我们想获取列表最后一个元素的offsetTop属性值,代码如下:
{{list[list.length-1]}}
<div ref="listEnd">{{list[list.length-1]}}</div>
Tick(() => {
let listEndTop = fs.listEnd.offsetTop 获取更新后的位置信息
console.log(listEndTop)
})
在上述例子中,{{list[list.length-1]}}会在下一次DOM更新完毕后显示出值,此时,ref="listEnd"所在的div会获取到更新后的位置信息。
总结
Tick方法是前端开发中非常常见的一个方法,可以获取到下一次DOM更新完毕后的信息,对于一些涉及到DOM操作、修改数据需要即时得到更新后状态的场景下,是非常有用的方法。希望本文对大家有所帮助。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论