Vue 解决通过this.$refs来获取DOM或者组件报错问题


Posted in Javascript onJuly 28, 2020

1.关于this.$refs的使用场景

如果ref属性加在普通元素上,那么this.$refs.name则指向该DOM元素

<p ref="p">hello</p>

<!-- this.$refs.p 指向该DOM元素 -->

如果ref属性加在组件上,那么this.$refs.name指向该组件实例

<child-component ref="child"></child-component>

<!-- this.$refs.child 指向该组件 -->

2.为什么有时候通过this.$refs.name来获取会报错?

一个比较常见的场景:在一个弹窗打开的时候立刻通过this.$refs来获取内容就会出现xxx is undefined的错误

因为ref本身是作为渲染结果被创建的,在渲染的时候是不能访问的,因为他们还不存在!

如果此时代码是需要这样来写代码,那么你可以在DOM渲染完毕后再进行获取

this.$nextTick(() => {
 this.$refs.name... //DOM渲染完毕后就能正常获取了
})

补充知识:vue ref用法(this.$refs获取为空)

//6.14更新

但是有个办法,我们可以使用

this.$nextTick(() => {
  // todo
})
 
setTimeout(() => {
  // todo
}, 0)

来得到数据

ref

本身作为渲染结果被创建,在初始渲染的时候不能访问他们,是不存在的

$refs不是响应式的,只在组件渲染完成后才填充

用于元素或子组件注册引用信息,注册完成,将会注册在父组件$refs对象上

如果你获取到的总是空的,你注意一下:

1、你在哪里调用,和你调用的对象

试试在mounted()里面调用有效果没有

调用的对象是本来就存在的,还是需要数据渲染之后才会出现的,同理,在mounted()里面调用看看

2、调用对象是不是数组列表

我一开始设置ref在v-for列表上,直接获取this.$refs.name.style,永远是空的,

后来才发现,this.$refs.name是一个数组,无法通过 .style 获取样式,

只能遍历这个this.$refs.name数组,在this.$refs.name[index]上设置样式

// 6.14 更新,这个说法有点问题

但是像高度宽度,可以通过offsetHeight,等来获取。

3、调用对象是否和v-if结合使用

ref不是响应式的,所有的动态加载的模板更新它都无法相应的变化。

最后

在使用中,我发现$refs.style只能设置该对象的样式,获取出来的值都是空的

以上这篇Vue 解决通过this.$refs来获取DOM或者组件报错问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery checkbox,radio是否选中的判断代码
Mar 20 Javascript
dess中一个简单的多路委托的实现
Jul 20 Javascript
javascript 正则表达式相关应介绍
Nov 27 Javascript
javaScript让文本框内的最后一个文字的后面获得焦点实现代码
Jan 06 Javascript
使用jQuery异步加载 JavaScript脚本解决方案
Apr 20 Javascript
基于jQuery实现多层次的手风琴效果附源码
Sep 21 Javascript
vue实现自定义H5视频播放器的方法步骤
Jul 01 Javascript
Webpack 4如何动态切割JS注入文件名详解
Jul 09 Javascript
vue中改变滚动条样式的方法
Mar 03 Javascript
微信小程序语音同步智能识别的实现案例代码解析
May 29 Javascript
js实现盒子滚动动画效果
Aug 09 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
Nov 16 Javascript
JS代码简洁方式之函数方法详解
Jul 28 #Javascript
vue 组件之间事件触发($emit)与event Bus($on)的用法说明
Jul 28 #Javascript
JavaScript前端开发时数值运算的小技巧
Jul 28 #Javascript
js实现全选和全不选
Jul 28 #Javascript
浅谈vue中$bus的使用和涉及到的问题
Jul 28 #Javascript
js实现全选和全不选功能
Jul 28 #Javascript
JavaScript React如何修改默认端口号方法详解
Jul 28 #Javascript
You might like
学习使用PHP数组
2006/10/09 PHP
php json_encode奇怪问题说明
2011/09/27 PHP
php7 安装yar 生成docker镜像
2017/05/09 PHP
PHP将数据导出Excel表中的实例(投机型)
2017/07/31 PHP
javascript 拖放效果实现代码
2010/01/22 Javascript
Jquery中children与find之间的区别详细解析
2013/11/29 Javascript
JQuery结合CSS操作打印样式的方法
2013/12/24 Javascript
jQuery 顶部导航跟随滚动条滚动固定浮动在顶部
2014/06/06 Javascript
百度地图自定义控件分享
2015/03/04 Javascript
js仿微博实现统计字符和本地存储功能
2015/12/22 Javascript
jQuery事件绑定on()与弹窗实现代码
2016/04/28 Javascript
JS实现的跨浏览器解析XML文件实例
2016/06/21 Javascript
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
2018/01/09 Javascript
js实现随机数小游戏
2019/06/28 Javascript
bootstrap实现嵌套模态框的实例代码
2020/01/10 Javascript
微信小程序弹窗禁止页面滚动的实现代码
2020/12/30 Javascript
python list元素为tuple时的排序方法
2018/04/18 Python
python实现画一颗树和一片森林
2018/06/25 Python
python中sys.argv函数精简概括
2018/07/08 Python
Django文件存储 默认存储系统解析
2019/08/02 Python
python 实现多线程下载视频的代码
2019/11/15 Python
python3 Scrapy爬虫框架ip代理配置的方法
2020/01/17 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
python list的index()和find()的实现
2020/11/16 Python
HTML5探秘:用requestAnimationFrame优化Web动画
2018/06/03 HTML / CSS
HTML如何让IMG自动适应DIV容器大小的实现方法
2020/02/25 HTML / CSS
小学生班会演讲稿
2014/01/09 职场文书
退休感言
2014/01/28 职场文书
网上商城创业计划书范文
2014/01/31 职场文书
《将心比心》教学反思
2014/04/08 职场文书
中班上学期幼儿评语
2014/04/30 职场文书
安全责任书
2015/01/29 职场文书
酒店采购员岗位职责
2015/04/03 职场文书
婚礼父母致辞
2015/07/28 职场文书
初中政治教学工作总结
2015/08/13 职场文书
速龙x4-860k处理器相当于i几
2022/04/20 数码科技