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 相关文章推荐
js客户端快捷键管理类的较完整实现和应用
Jun 08 Javascript
调用HttpHanlder的几种返回方式小结
Dec 20 Javascript
学习jQuey中的return false
Dec 18 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
Jan 27 Javascript
Vue+axios 实现http拦截及路由拦截实例
Apr 25 Javascript
vue proxyTable 接口跨域请求调试的示例
Sep 12 Javascript
js 倒计时(高效率服务器时间同步)
Sep 12 Javascript
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
Dec 06 Javascript
Vue表单控件绑定图文详解
Feb 11 Javascript
深入浅析vue-cli@3.0 使用及配置说明
May 08 Javascript
vue组件讲解(is属性的用法)模板标签替换操作
Sep 04 Javascript
vue 自定义组件添加原生事件
Apr 21 Vue.js
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
无线电的诞生过程
2021/03/01 无线电
PHP常用函数之获取汉字首字母功能示例
2019/10/21 PHP
JS宝典学习笔记(下)
2007/01/10 Javascript
JS 非图片动态loading效果实现代码
2010/04/09 Javascript
JQuery小知识
2010/10/15 Javascript
用JQuery 判断某个属性是否存在hasAttr的解决方法
2013/04/26 Javascript
在线所见即所得HTML编辑器的实现原理浅析
2015/04/25 Javascript
JS控制FileUpload的上传文件类型实例代码
2016/10/07 Javascript
Node.JS循环删除非空文件夹及子目录下的所有文件
2018/03/12 Javascript
javascript实现摄像头拍照预览
2019/09/30 Javascript
js实现GIF动图分解成多帧图片上传
2019/10/24 Javascript
vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题
2020/04/14 Javascript
vue treeselect获取当前选中项的label实例
2020/08/31 Javascript
从零学Python之引用和类属性的初步理解
2014/05/15 Python
Python实现批量把SVG格式转成png、pdf格式的代码分享
2014/08/21 Python
Python类的继承和多态代码详解
2017/12/27 Python
python开发准备工作之配置虚拟环境(非常重要)
2019/02/11 Python
python中对_init_的理解及实例解析
2019/10/11 Python
python3 实现函数写文件路径的正确方法
2019/11/27 Python
Python2与Python3的区别点整理
2019/12/12 Python
Pytorch 之修改Tensor部分值方式
2019/12/27 Python
python匿名函数lambda原理及实例解析
2020/02/07 Python
Python中文分词库jieba,pkusegwg性能准确度比较
2020/02/11 Python
python动态规划算法实例详解
2020/11/22 Python
CSS3 animation实现逐帧动画效果
2016/06/02 HTML / CSS
俄罗斯眼镜网: optikaworld
2016/07/31 全球购物
MONNIER Frères英国官网:源自巴黎女士奢侈品配饰电商平台
2018/12/06 全球购物
美国主要的特色咖啡和茶公司:Peet’s Coffee
2020/02/14 全球购物
天游软件面试
2013/11/23 面试题
.NET里面如何取得当前的屏幕分辨率
2012/12/06 面试题
Java中采用什么结构来捕获、处理异常?各子句的顺序、功能如何
2013/10/07 面试题
自我评价的范文
2014/02/02 职场文书
药店促销活动策划方案
2014/08/24 职场文书
观后感的写法
2015/06/19 职场文书
成功的商业计划书这样写才最靠谱
2019/07/12 职场文书
一文搞懂redux在react中的初步用法
2021/06/09 Javascript