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 相关文章推荐
Jquery ajax不能解析json对象,报Invalid JSON错误的原因和解决方法
Mar 27 Javascript
Javascript将string类型转换int类型
Dec 09 Javascript
关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
Jul 31 Javascript
jQuery调用AJAX时Get和post公用的乱码解决方法实例说明
Jun 04 Javascript
JavaScript声明变量名的语法规则
Jul 10 Javascript
jQuery基于ID调用指定iframe页面内的方法
Jul 06 Javascript
node.js请求HTTPS报错:UNABLE_TO_VERIFY_LEAF_SIGNATURE\的解决方法
Dec 18 Javascript
JS实现侧边栏鼠标经过弹出框+缓冲效果
Mar 29 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
May 11 Javascript
浅谈vue-cli 3.0.x 初体验
Apr 11 Javascript
vue-cli 如何打包上线的方法示例
May 08 Javascript
详解离线安装npm包的几种方法
Nov 25 Javascript
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
印尼林东PWN黄金曼特宁咖啡豆:怎么冲世界上最醇厚的咖啡冲煮教程
2021/03/03 冲泡冲煮
php将mysql数据库整库导出生成sql文件的具体实现
2014/01/08 PHP
PHP 正则表达式小结
2015/02/12 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
2019/06/13 PHP
让任务管理器中的CPU跳舞的js代码
2008/11/01 Javascript
关于window.pageYOffset和document.documentElement.scrollTop
2011/04/05 Javascript
javascript中的Base64、UTF8编码与解码详解
2015/03/18 Javascript
利用vue-router实现二级菜单内容转换
2016/11/30 Javascript
Angular @HostBinding()和@HostListener()用法
2018/03/05 Javascript
Angular-UI Bootstrap组件实现警报功能
2018/07/16 Javascript
微信小程序实现弹出层效果
2020/05/26 Javascript
详解微信小程序文件下载--视频和图片
2019/04/24 Javascript
[40:55]Liquid vs LGD 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python FTP两个文件夹间的同步实例代码
2018/05/25 Python
Python数据结构与算法(几种排序)小结
2019/06/22 Python
python装饰器的特性原理详解
2019/12/25 Python
Windows上安装tensorflow  详细教程(图文详解)
2020/02/04 Python
flask开启多线程的具体方法
2020/08/02 Python
python -v 报错问题的解决方法
2020/09/15 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
2020/10/29 Python
python如何获得list或numpy数组中最大元素对应的索引
2020/11/16 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
2021/02/01 Python
利用CSS3实现毛玻璃效果示例源码
2016/09/25 HTML / CSS
css3 线性渐变和径向渐变示例附图
2014/04/08 HTML / CSS
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
逼真的HTML5树叶飘落动画
2016/03/01 HTML / CSS
英国假睫毛购买网站:FalseEyelashes.co.uk
2018/05/23 全球购物
波兰多品牌运动商店:StreetStyle24.pl
2020/09/22 全球购物
EntityManager都有哪些方法
2013/11/01 面试题
幼教个人求职信范文
2013/12/02 职场文书
会计专业求职信范文
2014/03/16 职场文书
房屋租赁意向书
2014/04/01 职场文书
常务副县长“三严三实”对照检查材料思想汇报
2014/10/05 职场文书
党员先进事迹材料
2014/12/19 职场文书
2015秋季开学典礼新闻稿
2015/07/17 职场文书
tp5使用layui实现多个图片上传(带附件选择)的方法实例
2021/11/17 PHP