什么是Vue.nextTick()??

定义:在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。

所以就衍生出了这个获取更新后的DOM的Vue方法。所以放在Vue.nextTick()回调函数中的执行的应该是会对DOM进行操作的 js代码;

理解:nextTick(),是将回调函数延迟在下一次dom更新数据后调用,简单的理解是:当数据更新了,在dom中渲染后,自动执行该函数,

<template><div class="hello"><div><button id="firstBtn" @click="testClick()" ref="aa">{{testMsg}}</button></div></div>
</template><script>
export default {name: 'HelloWorld',data () {return {testMsg:"原始值",}},methods:{testClick:function(){let that=this;that.testMsg="修改后的值";console.log(that.$refs.aa.innerText);   //that.$refs.aa获取指定DOM,输出:原始值}}
}
</script>

使用this.$nextTick()

  methods:{testClick:function(){let that=this;that.testMsg="修改后的值";that.$nextTick(function(){console.log(that.$refs.aa.innerText);  //输出:修改后的值});}}

注意:Vue 实现响应式并不是数据发生变化之后 DOM 立即变化,而是按一定的策略进行 DOM 的更新。$nextTick 是在下次 DOM 更新循环结束之后执行延迟回调,在修改数据之后使用 $nextTick,则可以在回调中获取更新后的 DOM,

什么时候需要用的Vue.nextTick()??

1、Vue生命周期的created()钩子函数进行的DOM操作一定要放在Vue.nextTick()的回调函数中,原因是在created()钩子函数执行的时候DOM 其实并未进行任何渲染,而此时进行DOM操作无异于徒劳,所以此处一定要将DOM操作的js代码放进Vue.nextTick()的回调函数中。与之对应的就是mounted钩子函数,因为该钩子函数执行时所有的DOM挂载已完成。

  created(){let that=this;that.$nextTick(function(){  //不使用this.$nextTick()方法会报错that.$refs.aa.innerHTML="created中更改了按钮内容";  //写入到DOM元素});},

2、当项目中你想在改变DOM元素的数据后基于新的dom做点什么,对新DOM一系列的js操作都需要放进Vue.nextTick()的回调函数中;通俗的理解是:更改数据后当你想立即使用js操作新的视图的时候需要使用它

<template><div class="hello"><h3 id="h">{{testMsg}}</h3></div>
</template><script>
export default {name: 'HelloWorld',data () {return {testMsg:"原始值",}},methods:{changeTxt:function(){let that=this;that.testMsg="修改后的文本值";  //vue数据改变,改变dom结构let domTxt=document.getElementById('h').innerText;  //后续js对dom的操作console.log(domTxt);  //输出可以看到vue数据修改后DOM并没有立即更新,后续的dom都不是最新的if(domTxt==="原始值"){console.log("文本data被修改后dom内容没立即更新");}else {console.log("文本data被修改后dom内容被马上更新了");}},}
}
</script>

正确的用法是:vue改变dom元素结构后使用vue.$nextTick()方法来实现dom数据更新后延迟执行后续代码

    changeTxt:function(){let that=this;that.testMsg="修改后的文本值";  //修改dom结构that.$nextTick(function(){  //使用vue.$nextTick()方法可以dom数据更新后延迟执行let domTxt=document.getElementById('h').innerText; console.log(domTxt);  //输出可以看到vue数据修改后并没有DOM没有立即更新,if(domTxt==="原始值"){console.log("文本data被修改后dom内容没立即更新");}else {console.log("文本data被修改后dom内容被马上更新了");}});},

3、在使用某个第三方插件时 ,希望在vue生成的某些dom动态发生变化时重新应用该插件,也会用到该方法,这时候就需要在 $nextTick 的回调函数中执行重新应用插件的方法。

待完善???

Vue.nextTick(callback) 使用原理:

原因是,Vue是异步执行dom更新的,一旦观察到数据变化,Vue就会开启一个队列,然后把在同一个事件循环 (event loop) 当中观察到数据变化的 watcher 推送进这个队列。如果这个watcher被触发多次,只会被推送到队列一次。这种缓冲行为可以有效的去掉重复数据造成的不必要的计算和DOm操作。而在下一个事件循环时,Vue会清空队列,并进行必要的DOM更新。
当你设置 vm.someData = 'new value',DOM 并不会马上更新,而是在异步队列被清除,也就是下一个事件循环开始时执行更新时才会进行必要的DOM更新。如果此时你想要根据更新的 DOM 状态去做某些事情,就会出现问题。。为了在数据变化之后等待 Vue 完成更新 DOM ,可以在数据变化之后立即使用 Vue.nextTick(callback) 。这样回调函数在 DOM 更新完成后就会调用。

vue.nextTick()方法的使用详解(简单明了)相关推荐

  1. Python面向对象编程(类编程)中self的含义详解(简单明了直击本质的解释)

    以下是博主认为的对self讲解得比较透彻又简洁明了的资料. 上面的资料把这个问题说得简单明了,大家认真看一遍相信就对self有个深入的了解了. 总结一下: 在Python为面向对象编程中,成员函数被调 ...

  2. 在PHP里QRcode的参数详解,简单明了!

    QRCode码是由日本Denso公司于1994年9月研制的一种矩阵二维码符号,微信平台的火爆带动二维码在互联网行业的广泛应用. 目前个个行业几乎都使用到二维码来推广自己的品牌,只需要用手机轻轻一扫描, ...

  3. vue在created调用点击方法_vue.js中created方法的使用详解

    这次给大家带来vue.js中created方法的使用详解,使用vue.js中created方法的注意事项有哪些,下面就是实战案例,一起来看一下. 这是它的一个生命周期钩子函数,就是一个vue实例被生成 ...

  4. vue中 点击事件的写法_vue实现绑定事件的方法实例代码详解

    一.前言 vuejs中的事件绑定,使用来完成的,这里函数名是定义在Vue实例中的methods对象中的,Vue实例可以直接访问其中的方法. 二.事件绑定方式 1. 直接在标签中写js方法 执行方法的第 ...

  5. Vue 中的 ref 属性详解

    Vue 中的 ref 属性详解 我们先来读一下vue的官方文档 我们来分析官方文档 首先ref的引用是相当于一个DOM节点(如果是子组件则指向的是其实例),而且是一个string类型的值. 通俗的将就 ...

  6. python类是实例的工厂_Python设计模式之工厂方法模式实例详解

    本文实例讲述了Python设计模式之工厂方法模式.分享给大家供大家参考,具体如下: 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类, ...

  7. php动态写入vue,Vue自定义动态组件使用详解

    这次给大家带来Vue自定义动态组件使用详解,Vue自定义动态组件的注意事项有哪些,下面就是实战案例,一起来看一下. 现在基于vue的UI组件库有很多,比如iview,element-ui等.但有时候这 ...

  8. 大数据时代 | 数据分析方法及理论详解

    大数据时代 | 数据分析方法及理论详解 1 数据分析前,我们需要思考 像一场战役的总指挥影响着整个战役的胜败一样,数据分析师的思想对于整体分析思路,甚至分析结果都有着关键性的作用. 2 分析问题和解决 ...

  9. CentOS7下的软件安装方法及策略详解

    CentOS7下的软件安装方法及策略详解 互联网   01-24 15:15:09   作者:佚名   我要评论 今天小编为大家带来的是CentOS7下的软件安装方法及策略详解:希望对大家安装Cent ...

最新文章

  1. 在Windows7中与虚拟机实现远程桌面连接
  2. C++中基于Crt的内存泄漏检测
  3. 第14章:傅里叶变换
  4. Google Hacking技术
  5. 以太坊2.0客户端Lighthouse发布v1.3.0版本,为高优先级建议立即更新
  6. Qt应用程序主窗口框架
  7. c++比c快?一道字符串题目
  8. 12306为什么要安装根证书
  9. 《计算机网络 自顶向下方法》(第7版)答案(第六章)(二)
  10. Qt 基于Google引擎的拼音输入法
  11. C盘全面清理教程!彻底清理所有垃圾!
  12. 南阳oj 144 小柯的苦恼
  13. 64位CPU,64位操作系统,和64位应用程序三者之间的关系
  14. gitlab-runner错误之:New runner. Has not connected yet(runner注册成功到了gitlab,但是前面的图标是灰色三角形)
  15. 订单漏单问题分析及解决方案
  16. 数据通信与计算机网络课后习题
  17. Spring读源码系列之AOP--03---aop底层基础类学习
  18. c语言led左右循环程序,c语言编写程序,将led从左往右,再从右往左依次往返点亮...
  19. 关于DSP320F28335步进电机控制几个问题
  20. [Unity3D]Unity3D游戏开发之ACT游戏三连击效果实现综述

热门文章

  1. QRowTable表格控件-支持hover整行、checked整行、指定列排序等
  2. matlab函数exp,Matlab基本函数-exp函数
  3. 有感于技术出身的创业若干思考
  4. Thunderbird配置Exchange邮箱
  5. 【表盘识别】基于Hough变换实现指针式仪表识别(倾斜矫正)
  6. [Practical.Vim(2012.9)].Drew.Neil.Tip10学习摘要
  7. 计算机实验小学教导主任,小学教导主任职责
  8. 工业5G概述、应用与测试床建设
  9. 时事评论--民间只有传说
  10. 海淘 海外购 iherb 礼券码 优惠码