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 相关文章推荐
学习YUI.Ext第七日-View&JSONView Part Two-一个画室网站的案例
Mar 10 Javascript
改善你的jQuery的25个步骤 千倍级效率提升
Feb 11 Javascript
JavaScript中的匀速运动和变速(缓冲)运动详细介绍
Nov 11 Javascript
jquery 漂亮的删除确认和提交无刷新删除示例
Nov 13 Javascript
js中数组排序sort方法的原理分析
Nov 20 Javascript
2014 HTML5/CSS3热门动画特效TOP10
Dec 07 Javascript
5 种JavaScript编码规范
Jan 30 Javascript
通过封装scroll.js 获取滚动条的值
Jul 13 Javascript
koa大型web项目中使用路由装饰器的方法示例
Apr 02 Javascript
微信小程序中限制激励式视频广告位显示次数(实现思路)
Dec 06 Javascript
JavaScript适配器模式原理与用法实例详解
Mar 09 Javascript
JS Thunk 函数的含义和用法实例总结
Apr 08 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开发GUI
2006/10/09 PHP
php使用PDO执行SQL语句的方法分析
2017/02/16 PHP
通过源码解析Laravel的依赖注入
2018/01/22 PHP
本人自用的global.js库源码分享
2015/02/28 Javascript
JavaScript表格常用操作方法汇总
2015/04/15 Javascript
nodejs实现遍历文件夹并统计文件大小
2015/05/28 NodeJs
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
2016/07/07 Javascript
分享十三个最佳JavaScript数据网格库
2017/04/07 Javascript
Vue.js项目模板搭建图文教程
2017/09/20 Javascript
JS设计模式之命令模式概念与用法分析
2018/02/06 Javascript
jQuery实现轮播图及其原理详解
2020/04/12 jQuery
ios中视频的最后一桢问题解决
2019/05/14 Javascript
更优雅的微信小程序骨架屏实现详解
2019/08/07 Javascript
javascript的hashCode函数实现代码小结
2020/08/11 Javascript
JS实现小米轮播图
2020/09/21 Javascript
antd table按表格里的日期去排序操作
2020/11/17 Javascript
Python中selenium实现文件上传所有方法整理总结
2017/04/01 Python
浅谈Python中range和xrange的区别
2017/12/20 Python
NumPy 如何生成多维数组的方法
2018/02/05 Python
Python二元赋值实用技巧解析
2019/10/25 Python
Python csv文件记录流程代码解析
2020/07/16 Python
python 基于Apscheduler实现定时任务
2020/12/15 Python
python邮件中附加文字、html、图片、附件实现方法
2021/01/04 Python
让IE6支持css3,让 IE7、IE8 都支持CSS3
2011/10/09 HTML / CSS
HSRP的含义以及如何工作
2014/09/10 面试题
大学生优秀的自我评价分享
2013/10/22 职场文书
车间主管岗位职责
2013/11/14 职场文书
少先队入队活动方案
2014/02/08 职场文书
《和田的维吾尔》教学反思
2014/04/14 职场文书
四年级评语大全
2014/04/21 职场文书
对教师的评语
2014/04/28 职场文书
党的群众路线批评与自我批评范文
2014/10/16 职场文书
售后服务质量承诺书
2015/04/29 职场文书
安娜卡列尼娜观后感
2015/06/11 职场文书
浅谈如何提高PHP代码质量之端到端集成测试
2021/05/28 PHP
MySQL分区表实现按月份归类
2021/11/01 MySQL