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打印纸函数代码(递归)
Jun 18 Javascript
js实现的复制兼容chrome和IE
Apr 03 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
Mar 24 Javascript
JQuery使用$.ajax和checkbox实现下次不在通知功能
Apr 16 Javascript
基于bootstrap按钮式下拉菜单组件的搜索建议插件
Mar 25 Javascript
ES6中Proxy与Reflect实现重载(overload)的方法
Mar 30 Javascript
利用types增强vscode中js代码提示功能详解
Jul 07 Javascript
JS中通过url动态获取图片大小的方法小结(两种方法)
Oct 31 Javascript
微信小程序学习笔记之本地数据缓存功能详解
Mar 29 Javascript
node.js中fs文件系统模块的使用方法实例详解
Feb 13 Javascript
解决vue单页面 回退页面 keeplive 缓存问题
Jul 22 Javascript
Javascript 模拟mvc实现点餐程序案例详解
Dec 24 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
基于Discuz security.inc.php代码的深入分析
2013/06/03 PHP
PHP随机字符串生成代码(包括大小写字母)
2013/06/24 PHP
smarty的section嵌套循环用法示例
2016/05/28 PHP
Cookie 小记
2010/04/01 Javascript
js 函数调用模式小结
2011/12/26 Javascript
利用jquery的获取JS文件中的字符串内容
2012/02/14 Javascript
JS与C#编码解码
2013/12/03 Javascript
node.js入门教程
2014/06/01 Javascript
Node.js巧妙实现Web应用代码热更新
2015/10/22 Javascript
jquery自定义插件结合baiduTemplate.js实现异步刷新(附源码)
2016/12/22 Javascript
ionic2 tabs使用 Modal底部tab弹出框
2016/12/30 Javascript
JS批量替换内容中关键词为超链接
2017/02/20 Javascript
js简单实现网页换肤功能
2017/04/07 Javascript
详解升级react-router 4 踩坑指南
2017/08/14 Javascript
jQuery Ajax向服务端传递数组参数值的实例代码
2017/09/03 jQuery
js的继承方法小结(prototype、call、apply)(推荐)
2019/04/17 Javascript
详解vue 中 scoped 样式作用域的规则
2020/09/14 Javascript
[41:37]DOTA2北京网鱼队选拔赛——冲击职业之路
2015/04/13 DOTA
Python操作使用MySQL数据库的实例代码
2017/05/25 Python
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
2017/09/22 Python
Python箱型图绘制与特征值获取过程解析
2019/10/22 Python
Pytorch 实现权重初始化
2019/12/31 Python
Python代码注释规范代码实例解析
2020/08/14 Python
Python高阶函数与装饰器函数的深入讲解
2020/11/10 Python
Reebok俄罗斯官方网上商店:购买锐步运动服装和鞋子
2016/09/26 全球购物
澳大利亚制造的羊皮靴:Original UGG Boots
2017/11/13 全球购物
Booking.com缤客中国:全球酒店在线预订网站
2020/05/03 全球购物
ddl,dml和dcl的含义
2016/05/08 面试题
临床医学大学生求职信
2013/09/28 职场文书
《二泉映月》教学反思
2014/04/15 职场文书
工作推荐信范文
2014/05/10 职场文书
2014组织生活会方案
2014/05/19 职场文书
小学优秀教师先进事迹材料
2014/12/16 职场文书
2015年度工程师评职称工作总结
2015/10/14 职场文书
调解协议书范本
2016/03/21 职场文书
使用CSS设置滚动条样式
2022/01/18 HTML / CSS