vue中$nextTick的用法讲解


Posted in Javascript onJanuary 17, 2019

vue是非常流行的框架,他结合了angular和react的优点,从而形成了一个轻量级的易上手的具有双向数据绑定特性的mvvm框架。本人比较喜欢用之。在我们用vue时,我们经常用到一个方法是this.$nextTick,相信你也用过。我常用的场景是在进行获取数据后,需要对新视图进行下一步操作或者其他操作时,发现获取不到dom。因为赋值操作只完成了数据模型的改变并没有完成视图更新。在这个时候我们需要用到本章介绍的函数。

虽然 Vue.js 通常鼓励开发人员沿着“数据驱动”的方式思考,避免直接接触 DOM,但是有时我们确实要这么做。比如你在Vue生命周期的created()/mounted()钩子函数进行的DOM操作一定要放在Vue.nextTick()的回调函数中。原因是什么呢,原因是在created()/mounted()钩子函数执行的时候DOM 其实并未进行任何渲染,而此时进行DOM操作无异于徒劳,所以此处一定要将DOM操作的js代码放进Vue.nextTick()的回调函数中。

vue中$nextTick的用法讲解

为什么要用nextTick?

请看如下一段代码

new Vue({
 el: '#app',
 data: {
  list: []
 },
 mounted: function () {
  this.get()
 },
 methods: {
  get: function () {
   this.$http.get('/api/article').then(function (res) {
    this.list = res.data.data.list
    // ref list 引用了ul元素,我想把第一个li颜色变为红色
    this.$refs.list.getElementsByTagName('li')[0].style.color = 'red'
   })
  },
 }
})

我在获取到数据后赋值给数据模型中list属性,然后我想引用ul元素找到第一个li把它的颜色变为红色,但是事实上,这个要报错了,我们知道,在执行这句话时,ul下面并没有li,也就是说刚刚进行的赋值操作,当前并没有引起视图层的更新。因此,在这样的情况下,vue给我们提供了$nextTick方法,如果我们想对未来更新后的视图进行操作,我们只需要把要执行的函数传递给this.$nextTick方法,vue就会给我们做这个工作。

new Vue({
 el: '#app',
 data: {
  list: []
 },
 mounted: function () {
  this.$nextTick(() => {
    this.get()
  })
 },
 methods: {
  get: function () {
   this.$http.get('/api/article').then(function (res) {
    this.list = res.data.data.list
    // ref list 引用了ul元素,我想把第一个li颜色变为红色
    this.$refs.list.getElementsByTagName('li')[0].style.color = 'red'
   })
  },
 }
})

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Javascript 相关文章推荐
javascript setAttribute, getAttribute 在不同浏览器上的不同表现
Aug 05 Javascript
javascript对话框使用方法(警告框 javascript确认框 提示框)
Jan 07 Javascript
高性能JavaScript DOM编程(1)
Aug 11 Javascript
jQuery封装的屏幕居中提示信息代码
Jun 08 Javascript
PHP获取当前页面完整URL的方法
Dec 02 Javascript
jQuery 获取select选中值及清除选中状态
Dec 13 Javascript
jQuery实现的监听导航滚动置顶状态功能示例
Jul 23 jQuery
快速解决vue动态绑定多个class的官方实例语法无效的问题
Sep 05 Javascript
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
Sep 06 Javascript
JavaScript装饰者模式原理与用法实例详解
Mar 09 Javascript
js节流防抖应用场景,以及在vue中节流防抖的具体实现操作
Sep 21 Javascript
vue+flask实现视频合成功能(拖拽上传)
Mar 04 Vue.js
vue项目打包之后背景样式丢失的解决方案
Jan 17 #Javascript
js中Array对象的常用遍历方法详解
Jan 17 #Javascript
vuex如何重置所有state(可定制)
Jan 17 #Javascript
node app 打包工具pkg的具体使用
Jan 17 #Javascript
JS实现深度优先搜索求解两点间最短路径
Jan 17 #Javascript
JS使用Dijkstra算法求解最短路径
Jan 17 #Javascript
JavaScript简单实现的仿微博留言功能示例
Jan 17 #Javascript
You might like
20个PHP常用类库小结
2011/09/11 PHP
PHP获取MySql新增记录ID值的3种方法
2014/06/24 PHP
php中Array2xml类实现数组转化成XML实例
2014/12/08 PHP
简单理解PHP的面向对象编程方式
2016/05/17 PHP
快速保存网页中所有图片的方法
2006/06/23 Javascript
javascript 词法作用域和闭包分析说明
2010/08/12 Javascript
表头固定(利用jquery实现原理介绍)
2012/11/08 Javascript
为什么Node.js会这么火呢?Node.js流行的原因
2014/12/01 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
AngularJS中的模块详解
2015/01/29 Javascript
JavaScript获取表单enctype属性的方法
2015/04/02 Javascript
Javascript中的方法和匿名方法实例详解
2015/06/13 Javascript
JavaScript编写页面半透明遮罩效果的简单示例
2016/05/09 Javascript
H5用户注册表单页 注册模态框!
2016/09/17 Javascript
nodejs mysql 实现分页的方法
2017/06/06 NodeJs
完美解决linux下node.js全局模块找不到的情况
2018/05/16 Javascript
javascript中toFixed()四舍五入使用方法详解
2018/09/28 Javascript
微信小程序使用map组件实现获取定位城市天气或者指定城市天气数据功能
2019/01/22 Javascript
python数据结构之二叉树的建立实例
2014/04/29 Python
Python编写屏幕截图程序方法
2015/02/18 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
2018/04/21 Python
python对list中的每个元素进行某种操作的方法
2018/06/29 Python
python 美化输出信息的实例
2018/10/15 Python
远程部署工具Fabric详解(支持Python3)
2019/07/04 Python
Python中*args和**kwargs的区别详解
2019/09/17 Python
Django如何使用jwt获取用户信息
2020/04/21 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
2020/11/17 Python
深入剖析webstorage[html5的本地数据处理]
2016/07/11 HTML / CSS
html5 canvas fillRect坐标和大小的问题解决方法
2014/03/26 HTML / CSS
英国门把手公司:Door Handle Company
2019/05/12 全球购物
Java的for语句中break, continue和return的区别
2013/12/19 面试题
实习教师个人的自我评价
2013/11/08 职场文书
《海底世界》教学反思
2014/04/16 职场文书
2014党员四风对照检查材料思想汇报
2014/09/17 职场文书
大学学生会主席竞选稿怎么写?
2019/08/19 职场文书
Pytorch 如何实现LSTM时间序列预测
2021/05/17 Python