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判读浏览器是否支持html5的canvas的代码
Nov 18 Javascript
jQuery调用RESTful WCF示例代码(GET方法/POST方法)
Jan 26 Javascript
实例详解AngularJS实现无限级联动菜单
Jan 15 Javascript
简介BootStrap model弹出框的使用
Apr 27 Javascript
Bootstrap框架结合jQuery仿百度换肤功能实例解析
Sep 17 Javascript
详解基于DllPlugin和DllReferencePlugin的webpack构建优化
Jun 28 Javascript
vue中锚点的三种方法
Jul 06 Javascript
JavaScript中构造函数与原型链之间的关系详解
Feb 25 Javascript
vue+vant使用图片预览功能ImagePreview的问题解决
Apr 10 Javascript
vue pages 多入口项目 + chainWebpack 全局引用缩写说明
Sep 21 Javascript
Openlayers实现图形绘制
Sep 28 Javascript
Vue如何实现变量表达式选择器
Feb 18 Vue.js
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
重置版游戏视频
2020/04/09 魔兽争霸
PHP实现的封装验证码类详解
2013/06/18 PHP
php读取mysql中文数据出现乱码的解决方法
2013/08/16 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
2016/08/19 PHP
laravel接管Dingo-api和默认的错误处理方式
2019/10/25 PHP
laravel入门知识点整理
2020/09/15 PHP
基于jquery实现的可以编辑选择的下拉框的代码
2010/11/19 Javascript
javascript标签在页面中的位置探讨
2013/04/11 Javascript
利用JavaScript检测CPU使用率自己写的
2014/03/22 Javascript
JavaScript设置表单上传时文件个数的方法
2015/08/11 Javascript
使用JavaScript和CSS实现文本隔行换色的方法
2015/11/04 Javascript
JavaScript驾驭网页-DOM
2016/03/24 Javascript
jquery动态遍历Json对象的属性和值的方法
2016/07/27 Javascript
Javascript6中字符串的四个新用法分享
2016/09/11 Javascript
[原创]javascript typeof id==='string'?document.getElementById(id):id解释
2016/11/02 Javascript
从零学习node.js之搭建http服务器(二)
2017/02/21 Javascript
vue 监听某个div垂直滚动条下拉到底部的方法
2018/09/15 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
2019/03/04 Javascript
利用Vconsole和Fillder进行移动端抓包调试方法
2019/03/05 Javascript
深入浅析vue-cli@3.0 使用及配置说明
2019/05/08 Javascript
javascript使用链接跨域下载图片
2019/11/01 Javascript
跟老齐学Python之大话题小函数(1)
2014/10/10 Python
Python3实现从文件中读取指定行的方法
2015/05/22 Python
基于Python __dict__与dir()的区别详解
2017/10/30 Python
浅谈numpy库的常用基本操作方法
2018/01/09 Python
Django实现whoosh搜索引擎使用jieba分词
2020/04/08 Python
CSS3 实用技巧:实现黑白图像效果示例代码
2013/07/11 HTML / CSS
boostrap modal 闪现问题的解决方法
2020/09/01 HTML / CSS
《望庐山瀑布》教学反思
2014/04/22 职场文书
房地产活动策划方案
2014/05/14 职场文书
会计毕业生自荐书
2014/06/12 职场文书
五年级下册复习计划
2015/01/19 职场文书
工厂采购员岗位职责
2015/04/07 职场文书
MySQL查询学习之基础查询操作
2021/05/08 MySQL
pytorch中Schedule与warmup_steps的用法说明
2021/05/24 Python
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS