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入门教程(6) Window窗口对象
Jan 31 Javascript
javascript实现信息的显示和隐藏如注册页面
Dec 03 Javascript
javascript修改表格背景色实例代码分享
Dec 10 Javascript
javascript文本框内输入文字倒计数的方法
Feb 24 Javascript
了解Javascript的模块化开发
Mar 02 Javascript
javaScript中slice函数用法实例分析
Jun 08 Javascript
javascript简单实现类似QQ头像弹出效果的方法
Aug 03 Javascript
微信小程序 在Chrome浏览器上运行以及WebStorm的使用
Sep 27 Javascript
php register_shutdown_function函数详解
Jul 23 Javascript
分享vue里swiper的一些坑
Aug 30 Javascript
微信小程序实现图片翻转效果的实例代码
Sep 20 Javascript
何时/使用 Vue3 render 函数的教程详解
Jul 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
用PHP实现小型站点广告管理(修正版)
2006/10/09 PHP
php利用header函数实现文件下载时直接提示保存
2009/11/12 PHP
PHP最常用的ini函数分析 针对PHP.ini配置文件
2010/04/22 PHP
PHP+mysql实现的三级联动菜单功能示例
2019/02/15 PHP
使用laravel指定日志文件记录任意日志
2019/10/17 PHP
PHP实现文件上传操作和封装
2020/03/04 PHP
JavaScript DOM 添加事件
2009/02/14 Javascript
JavaScript 原型学习总结
2010/10/29 Javascript
各浏览器对link标签onload/onreadystatechange事件支持的差异分析
2011/04/27 Javascript
jquery属性选择器not has怎么写 行悬停高亮显示
2013/11/13 Javascript
jquery中ajax函数执行顺序问题之如何设置同步
2014/02/28 Javascript
js Dialog 去掉右上角的X关闭功能
2014/04/23 Javascript
学习JavaScript编程语言的8张思维导图分享
2015/03/27 Javascript
js clearInterval()方法的定义和用法
2015/11/11 Javascript
JS条形码(一维码)插件JsBarcode用法详解【编码类型、参数、属性】
2017/04/19 Javascript
vue点击自增和求和的实例代码
2019/11/06 Javascript
JS三级联动代码格式实例详解
2019/12/30 Javascript
JavaScript中的this妙用实例分析
2020/05/09 Javascript
[06:44]2018DOTA2亚洲邀请赛4.5 SOLO赛 MidOne vs Sumail
2018/04/06 DOTA
numpy下的flatten()函数用法详解
2019/05/27 Python
Django 开发环境与生产环境的区分详解
2019/07/26 Python
Tensorflow 使用pb文件保存(恢复)模型计算图和参数实例详解
2020/02/11 Python
python中四舍五入的正确打开方式
2021/01/18 Python
Flask中jinja2的继承实现方法及实例
2021/03/03 Python
英国最大的海报商店:GB Posters
2018/03/20 全球购物
美国在线家居装饰店:Belle&June
2018/10/24 全球购物
Joseph官网:英国小众奢侈品牌
2019/05/17 全球购物
荷兰照明、灯具和配件网上商店:dmlights
2019/08/25 全球购物
澳大利亚二手奢侈品网站:Modsie
2019/09/23 全球购物
衰败城市英国官网:Urban Decay英国
2020/04/29 全球购物
捷科时代的软件测试笔试题
2015/11/09 面试题
介绍一些UNIX常用简单命令
2014/11/11 面试题
证婚人搞笑证婚词
2014/01/10 职场文书
入党思想汇报怎么写
2014/04/03 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
护士辞职信怎么写
2015/02/27 职场文书