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 动画基础教程
Dec 25 Javascript
分享十五个最佳jQuery 幻灯插件和教程
Mar 27 Javascript
一个原生的用户等级的进度条
Jul 03 Javascript
javascript计算星座属相(十二生肖属相)示例代码
Jan 09 Javascript
node.js中的Socket.IO使用实例
Nov 04 Javascript
JavaScript中的some()方法使用详解
Jun 09 Javascript
AngularJS手动表单验证
Feb 01 Javascript
jQuery unbind 删除绑定事件详解
May 24 Javascript
JavaScript设计模式之单例模式详解
Jun 09 Javascript
基于匀速运动的实例讲解(侧边栏,淡入淡出)
Oct 17 Javascript
Vue中的Vux配置指南
Dec 08 Javascript
前端框架ECharts dataset对数据可视化的高级管理
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
最贵的咖啡是怎么产生的,它的风味怎么样?
2021/03/04 新手入门
php下把数组保存为文件格式的实例应用
2010/02/08 PHP
php curl模拟post请求小实例
2013/11/13 PHP
php中cookie的使用方法
2014/03/29 PHP
php 数组处理函数extract详解及实例代码
2016/11/23 PHP
PHP程序员学习使用Swoole的理由
2018/06/24 PHP
在Laravel5中正确设置文件权限的方法
2019/05/22 PHP
jquery插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
2013/02/04 Javascript
jquery读取xml文件实现省市县三级联动的方法
2015/05/29 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
2015/09/07 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
2015/11/24 Javascript
Node.js项目中调用JavaScript的EJS模板库的方法
2016/03/11 Javascript
JavaScript Ajax编程 应用篇
2016/07/02 Javascript
解析如何利用iframe标签以及js制作时钟
2016/12/08 Javascript
react-navigation 如何判断用户是否登录跳转到登录页的方法
2017/12/01 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
Vue组件通信的几种实现方法
2019/04/25 Javascript
vue实现抖音时间转盘
2019/09/08 Javascript
layui前端时间戳转化实例
2019/11/15 Javascript
node静态服务器实现静态读取文件或文件夹
2019/12/03 Javascript
vue+高德地图实现地图搜索及点击定位操作
2020/09/09 Javascript
[42:39]老党炸弹人试玩视频
2014/09/03 DOTA
[41:52]2018DOTA2亚洲邀请赛3月29日小组赛B组Effect VS Secret
2018/03/30 DOTA
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
Python切片索引用法示例
2018/05/15 Python
Python importlib模块重载使用方法详解
2020/10/13 Python
django中cookiecutter的使用教程
2020/12/03 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
2020/12/11 Python
thinkphp5 路由分发原理
2021/03/18 PHP
中国排名第一的外贸销售网站:LightInTheBox.com(兰亭集势)
2016/10/28 全球购物
大型活动组织方案
2014/05/10 职场文书
党员评议自我评价
2015/03/03 职场文书
2015年话务员工作总结
2015/04/29 职场文书
企业催款函范本
2015/06/24 职场文书
Go 语言下基于Redis分布式锁的实现方式
2021/06/28 Golang