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无限树状列表实现代码
Jan 11 Javascript
JavaScript网页定位详解
Jan 13 Javascript
js实现鼠标移到链接文字弹出一个提示层的方法
May 11 Javascript
jquery实现简单的轮换出现效果实例
Jul 23 Javascript
jQuery实现Tab菜单滚动切换的方法
Sep 21 Javascript
jquery+json实现分页效果
Mar 07 Javascript
利用jQuery设计一个简单的web音乐播放器的实例分享
Mar 08 Javascript
JavaScript浏览器对象模型BOM(BrowserObjectModel)实例详解
Nov 29 Javascript
小程序实现页面顶部选项卡效果
Nov 06 Javascript
vue表单验证你真的会了吗?vue表单验证(form)validate
Apr 07 Javascript
vue-cli3 项目优化之通过 node 自动生成组件模板 generate View、Component
Apr 30 Javascript
vue实现公告栏文字上下滚动效果的示例代码
Jun 16 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
ThinkPHP模板之变量输出、自定义函数与判断语句用法
2014/11/01 PHP
smarty模板引擎从配置文件中获取数据的方法
2015/01/22 PHP
PHP里的单例类写法实例
2015/06/25 PHP
PHP中抽象类和抽象方法概念与用法分析
2016/05/24 PHP
php实现解析xml并生成sql语句的方法
2018/02/03 PHP
js中各浏览器中鼠标按键值的差异
2011/04/07 Javascript
jQuery新的事件绑定机制on()示例应用
2014/07/18 Javascript
JavaScript中的DSL元编程介绍
2015/03/15 Javascript
window.location.reload 刷新使用分析(去对话框)
2015/11/11 Javascript
javascript的理解及经典案例分析
2016/05/20 Javascript
基于Marquee.js插件实现的跑马灯效果示例
2017/01/25 Javascript
详解微信小程序 相对定位和绝对定位
2017/05/11 Javascript
jquery.validate.js 多个相同name的处理方式
2017/07/10 jQuery
vue踩坑记-在项目中安装依赖模块npm install报错
2019/04/02 Javascript
javascript数组的定义及操作实例
2019/11/10 Javascript
VUE实现Studio管理后台之鼠标拖放改变窗口大小
2020/03/04 Javascript
JS寄快递地址智能解析的实现代码
2020/07/16 Javascript
js调用网络摄像头的方法
2020/12/05 Javascript
[04:15]DOTA2-DPC中国联赛1月19日Recap集锦
2021/03/11 DOTA
全面解读Python Web开发框架Django
2014/06/30 Python
在java中如何定义一个抽象属性示例详解
2017/08/18 Python
Python协程的用法和例子详解
2017/09/09 Python
Python人脸识别初探
2017/12/21 Python
python web自制框架之接受url传递过来的参数实例
2018/12/17 Python
Python中使用__new__实现单例模式并解析
2019/06/25 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
python实现图像全景拼接
2020/03/27 Python
简单了解python关键字global nonlocal区别
2020/09/21 Python
Python 带星号(* 或 **)的函数参数详解
2021/02/23 Python
HTML5中微数据概述及在搜索引擎中的使用举例
2013/02/07 HTML / CSS
深入理解HTML的FormData对象
2016/05/17 HTML / CSS
幼儿园小班植树节活动方案
2014/03/04 职场文书
宣传活动总结范文
2014/07/01 职场文书
岗位竞聘报告范文
2014/11/06 职场文书
面试通知邮件
2015/04/20 职场文书
golang 实现对Map进行键值自定义排序
2021/04/28 Golang