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基础知识filter()和find()实例说明
Jul 06 Javascript
extjs render 用法介绍
Sep 11 Javascript
javascript中文本框中输入法切换的问题
Dec 10 Javascript
基于jquery实现的文字向上跑动类似跑马灯的效果
Jun 17 Javascript
学习jQuey中的return false
Dec 18 Javascript
关于JavaScript 原型链的一点个人理解
Jul 31 Javascript
在vue中获取dom元素内容的方法
Jul 10 Javascript
mpvue项目中使用第三方UI组件库的方法
Sep 30 Javascript
JavaScript作用域链实例详解
Jan 21 Javascript
JavaScript格式化json和xml的方法示例
Jan 22 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
Dec 04 Javascript
在vue中实现嵌套页面(iframe)
Jul 30 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中设置时区,记录日志文件的实现代码
2013/01/07 PHP
DWZ+ThinkPHP开发时遇到的问题分析
2016/12/12 PHP
php使用preg_match()函数验证ip地址的方法
2017/01/07 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
javascript textarea光标定位方法(兼容IE和FF)
2011/03/12 Javascript
jQuery-Easyui 1.2 实现多层菜单效果的代码
2012/01/13 Javascript
jquery限制输入字数,并提示剩余字数实现代码
2012/12/24 Javascript
js Calender控件使用详解
2015/01/05 Javascript
jQuery实现菜单感应鼠标滑动动画效果的方法
2015/02/28 Javascript
详解JavaScript中shift()方法的使用
2015/06/09 Javascript
JavaScript+CSS实现仿天猫侧边网页菜单效果
2015/08/25 Javascript
JQuery实现简单的图片滑动切换特效
2015/11/22 Javascript
jQuery Easyui Datagrid实现单行的上移下移及保存移动的结果
2016/08/15 Javascript
使用Node.js实现RESTful API的示例
2017/08/01 Javascript
JS获取并处理php数组的方法实例分析
2018/09/04 Javascript
Vue3.0 响应式系统源码逐行分析讲解
2019/10/14 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
2020/02/03 Javascript
vant 中van-list的用法说明
2020/11/11 Javascript
[45:52]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第二场 12.09
2020/12/12 DOTA
利用python解决mysql视图导入导出依赖的问题
2017/12/17 Python
python3 打开外部程序及关闭的示例
2018/11/06 Python
CSS3实现滚动条动画效果代码分享
2016/08/03 HTML / CSS
Sneaker Studio乌克兰:购买运动鞋
2018/03/26 全球购物
Proenza Schouler官方网站:纽约女装和配饰品牌
2019/01/03 全球购物
小学教师的个人自我鉴定
2013/10/24 职场文书
好矿嫂事迹材料
2014/01/21 职场文书
文化活动实施方案
2014/03/28 职场文书
建议书范文
2015/02/05 职场文书
大班下学期个人总结
2015/02/13 职场文书
道歉情书大全
2015/05/12 职场文书
安全教育日主题班会
2015/08/13 职场文书
小学六年级班主任工作经验交流材料
2015/11/02 职场文书
护士心得体会范文
2016/01/25 职场文书
小学生作文写作技巧100例,非常实用!
2019/07/08 职场文书
golang 如何通过反射创建新对象
2021/04/28 Golang
如何解决php-fpm启动不了问题
2021/11/17 PHP