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 相关文章推荐
prototype Element学习笔记(Element篇三)
Oct 26 Javascript
jQuery动态添加 input type=file的实现代码
Jun 14 Javascript
JS Replace()的高级使用方法介绍
Jun 29 Javascript
jquery插件jquery.beforeafter.js实现左右拖拽分隔条对比图片的方法
Aug 07 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
Apr 05 Javascript
jQuery日程管理插件fullcalendar使用详解
Jan 07 Javascript
一篇文章搞定JavaScript类型转换(面试常见)
Jan 21 Javascript
详解Angular2 关于*ngFor 嵌套循环
May 22 Javascript
Vue.js 踩坑记之双向绑定
May 03 Javascript
简单了解vue中的v-if和v-show的区别
Oct 08 Javascript
javascript单张多张图无缝滚动实例代码
May 10 Javascript
element tree树形组件回显数据问题解决
Aug 14 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 友好URL的实现(吐血推荐)
2008/10/04 PHP
PHP 安全检测代码片段(分享)
2013/07/05 PHP
PHP5全版本绕过open_basedir读文件脚本漏洞详细介绍
2015/01/20 PHP
PHP实现懒加载的方法
2015/03/07 PHP
php7基于递归实现删除空文件夹的方法示例
2017/06/15 PHP
Laravel 加载第三方类库的方法
2018/04/20 PHP
javascript 单选框,多选框美化代码
2008/08/01 Javascript
使用node.js半年来总结的 10 条经验
2014/08/18 Javascript
举例讲解Node.js中的Writable对象
2015/07/29 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
2016/05/28 Javascript
Bootstrap插件全集
2016/07/18 Javascript
微信小程序wx:for和wx:for-item的用法详解
2018/04/01 Javascript
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
2018/04/17 jQuery
NodeJS实现自定义流的方法
2018/08/01 NodeJs
简单了解vue 插值表达式Mustache
2020/07/22 Javascript
解决vue中axios设置超时(超过5分钟)没反应的问题
2020/09/04 Javascript
python开发之函数定义实例分析
2015/11/12 Python
Python实现将不规范的英文名字首字母大写
2016/11/15 Python
Python实现将HTML转换成doc格式文件的方法示例
2017/11/20 Python
Python文本特征抽取与向量化算法学习
2017/12/22 Python
python安装pil库方法及代码
2019/06/25 Python
Python实现手机号自动判断男女性别(实例解析)
2019/12/22 Python
Python3 中sorted() 函数的用法
2020/03/24 Python
Python使用urlretrieve实现直接远程下载图片的示例代码
2020/08/17 Python
Python做图像处理及视频音频文件分离和合成功能
2020/11/24 Python
Vans奥地利官方网站:美国原创极限运动潮牌
2018/09/30 全球购物
统计岗位职责
2014/02/21 职场文书
初中家长寄语
2014/04/02 职场文书
优秀护士演讲稿
2014/04/30 职场文书
会计毕业生自荐书
2014/06/12 职场文书
2014年教师节寄语
2014/08/11 职场文书
活动新闻稿范文
2015/07/17 职场文书
运动会800米赞词
2015/07/22 职场文书
创业计划书之暑假培训班
2019/11/09 职场文书
Vue实现跑马灯样式文字横向滚动
2021/11/23 Vue.js