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 相关文章推荐
学习面向对象之面向对象的术语
Nov 30 Javascript
JS中的public和private对象,即static修饰符
Jan 18 Javascript
jQuery获取样式中的背景颜色属性值/颜色值
Dec 17 Javascript
jquery.cookie.js使用指南
Jan 05 Javascript
JS+CSS实现美化的下拉列表框效果
Aug 11 Javascript
JS控制弹出悬浮窗口(一览画面)的实例代码
May 30 Javascript
JS判断iframe是否加载完成的方法
Aug 03 Javascript
基本DOM节点操作
Jan 17 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
Mar 28 jQuery
jQuery加PHP实现图片上传并提交的示例代码
Jul 16 jQuery
vue接口请求加密实例
Aug 11 Javascript
JavaScript 几种循环方式以及模块化的总结
Sep 03 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
smarty 缓存控制前的页面静态化原理
2013/03/15 PHP
php中自定义函数dump查看数组信息类似var_dump
2014/01/27 PHP
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
PHP函数实现从一个文本字符串中提取关键字的方法
2015/07/01 PHP
php统计数组元素个数的方法
2015/07/02 PHP
thinkphp3.2点击刷新生成验证码
2016/02/16 PHP
Android AsyncTack 异步任务实例详解
2016/11/02 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
搭建PhpStorm+PhpStudy开发环境的超详细教程
2020/09/17 PHP
javascript中onmouse事件在div中失效问题的解决方法
2012/01/09 Javascript
基于jquery的文本框与autocomplete结合使用(asp.net+json)
2012/05/30 Javascript
删除Javascript Object中间的key
2014/11/18 Javascript
jQuery实现鼠标划过修改样式的方法
2015/04/14 Javascript
JavaScript设计模式之单体模式全面解析
2016/09/09 Javascript
Html5+jQuery+CSS制作相册小记录
2016/12/30 Javascript
js截取字符串功能的实现方法
2017/09/27 Javascript
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
vue router的基本使用和配置教程
2018/11/05 Javascript
微信小程序中的canvas 文字断行和省略号显示功能的处理方法
2018/11/14 Javascript
vue.js的vue-cli脚手架中使用百度地图API的实例
2019/01/21 Javascript
python使用rsa加密算法模块模拟新浪微博登录
2014/01/22 Python
Python类的用法实例浅析
2015/05/27 Python
学习Python selenium自动化网页抓取器
2018/01/20 Python
浅谈Tensorflow模型的保存与恢复加载
2018/04/26 Python
Python selenium抓取微博内容的示例代码
2018/05/17 Python
使用Python对微信好友进行数据分析
2018/06/27 Python
PyTorch里面的torch.nn.Parameter()详解
2020/01/03 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
2020/02/11 Python
深入浅析python变量加逗号,的含义
2020/02/22 Python
Linux机考试题
2015/10/16 面试题
三八妇女节活动主持词
2014/03/17 职场文书
护士求职信
2014/07/05 职场文书
委托收款证明
2015/06/23 职场文书
Python 正则模块详情
2021/11/02 Python
Vue OpenLayer测距功能的实现
2022/04/20 Vue.js