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 面向对象的之私有成员和公开成员
May 04 Javascript
动态显示可输入的字数提示还可以输入的字数
Apr 01 Javascript
基于 Node.js 实现前后端分离
Apr 23 Javascript
100行代码理解和分析vue2.0响应式架构
Mar 09 Javascript
二维码图片生成器QRCode.js简单介绍
Aug 18 Javascript
浅谈Vue SSR 的 Cookies 问题
Nov 20 Javascript
浅析JavaScript中的特殊数据类型
Dec 15 Javascript
Javascript实现秒表倒计时功能
Nov 17 Javascript
详解使用webpack+electron+reactJs开发windows桌面应用
Feb 01 Javascript
《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析
Apr 07 Javascript
js+css3实现简单时钟特效
Sep 13 Javascript
使用js原生实现年份轮播选择效果实例
Jan 12 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
JAVA/JSP学习系列之二
2006/10/09 PHP
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
2007/04/18 PHP
无JS,完全php面向过程数据分页实现代码
2012/08/27 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
2017/08/15 PHP
SyntaxHighlighter语法高亮插件使用说明
2011/08/14 Javascript
jQuery的slideToggle方法实例
2013/05/07 Javascript
解析prototype,JQuery中跳出each循环的方法
2013/12/12 Javascript
jquery动态添加元素事件失效问题解决方法
2014/05/23 Javascript
JS+CSS实现可以凹陷显示选中单元格的方法
2015/03/02 Javascript
javascript元素动态创建实现方法
2015/05/13 Javascript
jQuery绑定事件on()与弹窗的简要概述
2016/04/27 Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
2016/07/14 Javascript
纯js封装的ajax功能函数与用法示例
2018/05/14 Javascript
解决vue的变量在settimeout内部效果失效的问题
2018/08/30 Javascript
微信小程序项目总结之记账小程序功能的实现(包括后端)
2019/08/20 Javascript
Node如何后台数据库使用增删改查功能
2019/11/21 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
2020/04/08 Javascript
python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
2014/06/09 Python
简单实现python收发邮件功能
2018/01/05 Python
Python中str.join()简单用法示例
2018/03/20 Python
python实现批量图片格式转换
2020/06/16 Python
python实现超级马里奥
2020/03/18 Python
python如何调用字典的key
2020/05/25 Python
python爬虫使用正则爬取网站的实现
2020/08/03 Python
Python自动化测试基础必备知识点总结
2021/02/07 Python
css3圆角样式分享自定义按钮样式
2013/12/27 HTML / CSS
html5文本内容_动力节点Java学院整理
2017/07/11 HTML / CSS
HTC VIVE美国官网:VR虚拟现实眼镜
2018/02/13 全球购物
Currentbody法国:健康与美容高科技产品
2020/08/16 全球购物
sort命令的作用和用法
2013/08/25 面试题
大二法学专业职业生涯规划范文
2014/02/12 职场文书
广告创意求职信
2014/03/17 职场文书
我为党旗添光彩演讲稿
2014/09/10 职场文书
2014党委书记四风对照检查材料思想汇报
2014/09/21 职场文书
自荐信格式模板
2015/03/27 职场文书
vue/cli 配置动态代理无需重启服务的方法
2022/05/20 Vue.js