Vue 中 $nextTick() 讲解 | 您所在的位置:网站首页 › $nexttick是什么 › Vue 中 $nextTick() 讲解 |
$nextTick()用法: this.$nextTick(),在下次 DOM 更新循环结束之后执行延迟回调。什么意思? 来看一个简单的小例子,感受一下 $nextTick() 是干嘛的: 两个div,一个button按钮 {{ onediv }} 第一个div {{ twodiv }} 第二个div 点击我将000改成456将一个div默认值设为123,第二个默认值设为000 data() { return { onediv: "123", twodiv: "000" }; }当我点击按钮的时候,将第一个div的值123改变成456,同时获取到div改变后的值456,赋给第二个div。也就是说结果两个div都应该为456. methods: { handleClick() { this.onediv = "456"; this.twodiv = this.$refs.onediv.innerHTML; // 通过原生$ref获取到第一个div改变后的值,然后赋给第二给div console.log(this.twodiv); } }我们点击后查看 我们发现,第一个div确实是改变了,但是第二个div获取到的值却是第一个div之前的值,因为Dom还没有更新循环完,所以它的值还是123。回过头看一下 其实this.$nextTick用法到这里也就完了,我们也可以按照nextTick的中文意思(节点的下一步)来真正理解它的含义了,也就是等到Dom节点结束后再执行下一步的操作。那么我再多说一些: 刚才的案例,同时也说明了一个问题,Vue 在更新 DOM 时是异步执行的。所以this.$nextTick是处理异步的一个回调函数,它返回的是一个promise对象,那么我们这个代码也可以用promise来改写,我们可以用 ES7 async/await 语法完成相同的事情: methods: { async handleClick() { this.onediv = "456"; await this.$nextTick(); // await 等待返回值后,再执行下面的事情。 this.twodiv = this.$refs.onediv.innerHTML; // 通过原生$ref获取到第一个div改变后的值,然后赋给第二给div console.log(this.twodiv); } }结果也是一样的。 文章摘自https://yq.aliyun.com/articles/720579 |
CopyRight 2018-2019 实验室设备网 版权所有 |