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 相关文章推荐
JS写的数字拼图小游戏代码[学习参考]
Oct 29 Javascript
ExtJs 3.1 XmlTreeLoader Example Error
Feb 09 Javascript
XMLHTTP 乱码的解决方法(UTF8,GB2312 编码 解码)
Jan 12 Javascript
JavaScript编写检测用户所使用的浏览器的代码示例
May 05 Javascript
js实现页面a向页面b传参的方法
May 29 Javascript
一篇文章搞定JavaScript类型转换(面试常见)
Jan 21 Javascript
jQuery.cookie.js使用方法及相关参数解释
Mar 06 Javascript
对angular2中的ngfor和ngif指令嵌套实例讲解
Sep 12 Javascript
详解vue-cli项目开发/生产环境代理实现跨域请求
Jul 23 Javascript
jQuery三组基本动画与自定义动画操作实例总结
May 09 jQuery
bootstrapValidator表单校验、更改状态、新增、移除校验字段的实例代码
May 19 Javascript
避坑之 JavaScript 中的toFixed()和正则表达式
Apr 19 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
完美解决dedecms中的[html][/html]和[code][/code]问题
2007/03/20 PHP
PHP中CURL方法curl_setopt()函数的参数分享
2013/01/19 PHP
php读取图片内容并输出到浏览器的实现代码
2013/08/08 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
2018/08/02 PHP
js页面跳转常用的几种方式
2010/11/25 Javascript
document.documentElement和document.body区别介绍
2013/09/16 Javascript
jquery获取tr并更改tr内容示例代码
2014/02/13 Javascript
js 与 php 通过json数据进行通讯示例
2014/03/26 Javascript
javascript写的一个模拟阅读小说的程序
2014/04/04 Javascript
基于bootstrap实现广告轮播带图片和文字效果
2016/07/22 Javascript
jquery+css实现下拉列表功能
2017/09/03 jQuery
JS表单传值和URL编码转换
2018/03/03 Javascript
Node.JS在命令行中检查Chrome浏览器是否安装并打开指定网址
2019/05/21 Javascript
jQuery操作cookie的示例代码
2019/06/05 jQuery
对layui中的onevent 和event的使用详解
2019/09/06 Javascript
JS实现随机点名器
2020/04/12 Javascript
部署vue+Springboot前后端分离项目的步骤实现
2020/05/31 Javascript
jQuery实现带进度条的轮播图
2020/09/13 jQuery
[39:32]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第二场
2014/05/23 DOTA
零基础写python爬虫之爬虫编写全记录
2014/11/06 Python
Pycharm+Python+PyQt5使用详解
2019/09/25 Python
python 实现简单的FTP程序
2019/12/27 Python
Keras使用tensorboard显示训练过程的实例
2020/02/15 Python
canvas学习总结三之绘制路径-线段
2019/01/31 HTML / CSS
NFL墨西哥官方商店:Tienda NFL
2017/11/28 全球购物
英国折扣高尔夫商店:Discount Golf Store
2019/11/19 全球购物
链表面试题-一个链表的结点结构
2015/05/04 面试题
车祸赔偿收入证明
2014/01/09 职场文书
高中数学教学反思
2014/01/30 职场文书
化妆品促销方案
2014/02/24 职场文书
2014五一国际劳动节活动总结范文
2014/04/14 职场文书
大学生在校表现评语
2014/12/31 职场文书
销售经理工作检讨书
2015/02/19 职场文书
血轮眼轮回眼特效 html+css
2021/03/31 HTML / CSS
奥特曼十大神器:奥特手镯在榜,第一是贝利亚的神器
2022/03/18 日漫
MySQL数据库配置信息查看与修改方法详解
2022/06/25 MySQL