Vue 中 $nextTick() 讲解 您所在的位置:网站首页 $nexttick是什么 Vue 中 $nextTick() 讲解

Vue 中 $nextTick() 讲解

#Vue 中 $nextTick() 讲解| 来源: 网络整理| 查看: 265

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

我们点击后查看

image.png

我们发现,第一个div确实是改变了,但是第二个div获取到的值却是第一个div之前的值,因为Dom还没有更新循环完,所以它的值还是123。回过头看一下 nextTick 的用法介绍,就知道了,所以这个时候我们想获取到div更改后的值,就需要用到 `nextTick`。我们用 $nextTick 将它包裹起来,等到Dom节点渲染循环完,我们再取值,再赋值。

methods: { handleClick() { this.onediv = "456"; this.$nextTick(() => { this.twodiv = this.$refs.onediv.innerHTML; // 通过原生$ref获取到第一个div改变后的值,然后赋给第二给div console.log(this.twodiv); }); } } image.png

其实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 实验室设备网 版权所有