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模块化编程(一)AMD规范(规范使用模块)
Jan 17 Javascript
Extjs表单常见验证小结
Mar 07 Javascript
jQuery的load()方法及其回调函数用法实例
Mar 25 Javascript
jQuery实现dialog设置focus焦点的方法
Jun 10 Javascript
JS使用post提交的两种方式
Dec 03 Javascript
jQuery事件处理的特征(事件命名机制)
Aug 23 Javascript
JQuery遍历元素的父辈和祖先的方法
Sep 18 Javascript
vue.js之vue-cli脚手架的搭建详解
May 05 Javascript
jQuery实现用户信息表格的添加和删除功能
Sep 12 jQuery
详解用Webpack与Babel配置ES6开发环境
Mar 12 Javascript
js简单遍历获取对象中的属性值的方法示例
Jun 19 Javascript
jQuery实现颜色打字机的完整代码
Mar 19 jQuery
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 文件上传系统手记
2009/10/26 PHP
那些年一起学习的PHP(一)
2012/03/21 PHP
js和php邮箱地址验证的实现方法
2014/01/09 PHP
php 检查电子邮件函数(自写)
2014/01/16 PHP
PHP发送短信代码分享
2015/08/11 PHP
PHP使用trim函数去除字符串左右空格及特殊字符实例
2016/01/07 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
2016/06/30 PHP
php微信公众平台开发之微信群发信息
2016/09/13 PHP
js注意img图片的onerror事件的分析
2011/01/01 Javascript
JQuery插件开发示例代码
2013/11/06 Javascript
jquery 删除cookie失效的解决方法
2013/11/12 Javascript
JS判断客户端是手机还是PC的2个代码
2014/04/12 Javascript
jQuery获取iframe的document对象的方法
2014/10/10 Javascript
angularjs学习笔记之双向数据绑定
2015/09/26 Javascript
原生JS实现图片轮播与淡入效果的简单实例
2016/08/21 Javascript
详解用vue-cli来搭建vue项目和webpack
2017/04/20 Javascript
微信小程序开发animation心跳动画效果
2017/08/16 Javascript
vue项目中,main.js,App.vue,index.html的调用方法
2018/09/20 Javascript
微信小程序实现定位及到指定位置导航的示例代码
2019/08/20 Javascript
使用JavaScript通过前端发送电子邮件
2020/05/22 Javascript
[04:00]黄浦江畔,再会英雄——完美世界DOTA2 TI9应援视频
2019/07/31 DOTA
用python删除java文件头上版权信息的方法
2014/07/31 Python
win7上python2.7连接mysql数据库的方法
2017/01/14 Python
Python传递参数的多种方式(小结)
2019/09/18 Python
Python基础之函数基本用法与进阶详解
2020/01/02 Python
Python实现结构体代码实例
2020/02/10 Python
python Canny边缘检测算法的实现
2020/04/24 Python
详解Windows下PyCharm安装Numpy包及无法安装问题解决方案
2020/06/18 Python
HTML5实现WebSocket协议原理浅析
2014/07/07 HTML / CSS
DKNY品牌官网:纽约大都会时尚风格
2016/10/20 全球购物
客服服务心得体会
2013/12/30 职场文书
2014学校庆三八妇女节活动总结
2014/03/01 职场文书
入党积极分子学习党的纲领思想汇报
2014/09/13 职场文书
副总经理岗位职责范本
2015/04/08 职场文书
Flask使用SQLAlchemy实现持久化数据
2021/07/16 Python
MySQL中utf8mb4排序规则示例
2021/08/02 MySQL