vue中使用refs定位dom出现undefined的解决方法


Posted in Javascript onDecember 21, 2017

之前在公司做项目,一直感觉用ref来定位dom节点挺方便的。但是期间遇到了一个问题,就是在mounted(){}钩子里面使用this.$refs.xxx,打印出来的却是undefined?

于是我就对比了一下之前使用ref定位的.vue文件,发现了他们之间的区别。

我们要想知道为什么会定位不到某个DOM节点,我们首先要理解mounted(){}这个钩子函数是用来做什么的。

下面是vue官方给出的vue生命周期(部分),正如官方所说的一样,一开始不必先理解,不过随这你的学习与使用,他的参考价值会越来越高。

 vue中使用refs定位dom出现undefined的解决方法

原来,mounted阶段,DOM结构准备就绪,但是这里的准备就绪需要特别说明一下:

DOM结构已经出来了,但是如果在DOM结构中的某个DOM节点使用了v-if、v-show或者v-for(即根据获得的后台数据来动态操作DOM,即响应式),那么这些DOM是不会再mounted阶段找到的。

此时的mounted阶段,一般是用于发起后端请求,拿回数据,配合路由钩子做一些事情,简单来说就是在mounted钩子中加载数据而已,加载回来的数据是不会再这个阶段更新的DOM中的

所以如果在mounted钩子中使用$refs,如果ref是定位在有v-if、v-for、v-show中的DOM节点,返回来的只能是undefined,因为在mounted阶段他们根本不存在!!

经过检验,上面端文字是错误的,$refs定位不到的主要原因是因为v-if、v-for、v-show这些语句如果依赖父组件传来的参数的话,该该参数是在mounted()阶段子还没获取得到~~~~!!!!

如果想要真正地在DOM加载完成后拿到数据,就需要调用VUE的全局api : this.$nextTick(() => {})

如果说mounted阶段是加载阶段,那么updated阶段则是完成了数据更新到DOM的阶段(对加载回来的数据进行处理),此时,ref、数据等等全部都挂载到DOM结构上去,在update阶段使用this.$refs.xxx,就100%能找到该DOM节点。

updated与mounted不同的是,在每一次的DOM结构更新,vue都会调用一次updated(){}钩子函数!而mounted仅仅只执行一次而已

简单来说,只要在调试的时候,能看到元素的存在,在updated阶段都可以使用this.$refs.xxx找到对应的DOM节点!

关于$refs的使用,官方文档特别给出了以下提示:

vue中使用refs定位dom出现undefined的解决方法 

使用的时候就注意咯- -

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery EasyUI 对话框的使用方法
Oct 24 Javascript
自己动手制作jquery插件之自动添加删除行功能介绍
Oct 14 Javascript
Android中的jQuery:AQuery简介
May 06 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
Feb 17 Javascript
js实现div拖动动画运行轨迹效果代码分享
Aug 27 Javascript
再谈JavaScript异步编程
Jan 27 Javascript
Javascript中字符串和数字的操作方法整理
Jan 22 Javascript
jQuery自定义元素右键点击事件(实现案例)
Apr 28 jQuery
JS Input里添加小图标的两种方法
Nov 11 Javascript
Nuxt.js实战详解
Jan 18 Javascript
vue axios基于常见业务场景的二次封装的实现
Sep 21 Javascript
移动端吸顶fixbar的解决方案详解
Jul 17 Javascript
js中bool值的转换及“&&”、“||”、 “!!”详解
Dec 21 #Javascript
利用node实现一个批量重命名文件的函数
Dec 21 #Javascript
详解webpack3编译兼容IE8的正确姿势
Dec 21 #Javascript
利用vue开发一个所谓的数独方法实例
Dec 21 #Javascript
开发Vue树形组件的示例代码
Dec 21 #Javascript
详解使用vuex进行菜单管理
Dec 21 #Javascript
Angular5.1新功能分享
Dec 21 #Javascript
You might like
用PHP读取flv文件的播放时间长度
2009/09/03 PHP
PHP提取数据库内容中的图片地址并循环输出
2010/03/21 PHP
Zend的MVC机制使用分析(二)
2013/05/02 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
php+Ajax处理xml与json格式数据的方法示例
2019/03/04 PHP
用脚本调用样式的几种方法
2006/12/09 Javascript
40款非常棒的jQuery 插件和制作教程(系列二)
2011/11/02 Javascript
js实现网站最上边可关闭的浮动广告条代码
2015/09/04 Javascript
js创建对象的方法汇总
2016/01/07 Javascript
JavaScript在form表单中使用button按钮实现submit提交方法
2017/01/23 Javascript
js获取浏览器和屏幕的各种宽度高度
2017/02/22 Javascript
详解nodeJS中读写文件方法的区别
2017/03/06 NodeJs
详解打造 Vue.js 可复用组件
2017/03/24 Javascript
javascript 中的继承实例详解
2017/05/05 Javascript
基于DOM节点删除之empty和remove的区别(详解)
2017/09/11 Javascript
layui的table中显示图片方法
2018/08/17 Javascript
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
Vue infinite update loop的问题解决
2019/04/23 Javascript
javascript 数组(list)添加/删除的实现
2020/12/17 Javascript
python类型强制转换long to int的代码
2013/02/10 Python
Python数据可视化编程通过Matplotlib创建散点图代码示例
2017/12/09 Python
对pandas中apply函数的用法详解
2018/04/10 Python
python实现推箱子游戏
2020/03/25 Python
python pytest进阶之fixture详解
2019/06/27 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
2019/09/07 Python
python pymysql链接数据库查询结果转为Dataframe实例
2020/06/05 Python
Myprotein法国官网:欧洲第一运动营养品牌
2019/03/26 全球购物
电子信息毕业生自荐信
2013/11/16 职场文书
人事部岗位职责范本
2014/03/05 职场文书
创先争优个人承诺书
2014/08/30 职场文书
单位委托书格式范本
2014/09/29 职场文书
品质保证书格式
2015/02/28 职场文书
2016教师廉洁教育心得体会
2016/01/13 职场文书
php实例化对象的实例方法
2021/11/17 PHP
使用Python解决图表与画布的间距问题
2022/04/11 Python