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 相关文章推荐
JavaScript中获取未知对象属性的代码
Apr 27 Javascript
js页面滚动时层智能浮动定位实现(jQuery/MooTools)
Aug 23 Javascript
javaScript面向对象继承方法经典实现
Aug 20 Javascript
JS对HTML标签select的获取、添加、删除操作
Oct 17 Javascript
JS使用正则实现去掉字符串左右空格的方法
Dec 27 Javascript
JavaScript中数组的各种操作的总结(必看篇)
Feb 13 Javascript
JavaScript之iterable_动力节点Java学院整理
Jun 29 Javascript
vue轮播图插件vue-concise-slider的使用
Mar 13 Javascript
基于vue2.0动态组件及render详解
Mar 17 Javascript
小程序文字跑马灯效果
Dec 28 Javascript
Vue-Cli项目优化操作的实现
Oct 27 Javascript
JavaScript中EventBus实现对象之间通信
Oct 18 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获得当前的脚本网址
2007/12/10 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
2017/03/31 PHP
PHP如何获取当前主机、域名、网址、路径、端口等参数
2017/06/09 PHP
自己动手开发jQuery插件教程
2011/08/25 Javascript
JavaScript 图像动画的小demo
2012/05/23 Javascript
js中replace的用法总结
2013/12/27 Javascript
js生成动态表格并为每个单元格添加单击事件的方法
2014/04/14 Javascript
node.js中实现同步操作的3种实现方法
2014/12/05 Javascript
Windows下用PyCharm和Visual Studio开始Python编程
2015/10/26 Javascript
js多个物体运动功能实例分析
2016/12/20 Javascript
javascript实现动态显示颜色块的报表效果
2017/04/10 Javascript
发布Angular应用至生产环境的方法
2018/12/10 Javascript
js中位运算的运用实例分析
2018/12/11 Javascript
详解从react转职到vue开发的项目准备
2019/01/14 Javascript
vue缓存的keepalive页面刷新数据的方法
2019/04/23 Javascript
vue中$refs, $emit, $on, $once, $off的使用详解
2019/05/26 Javascript
LayUI数据接口返回实体封装的例子
2019/09/12 Javascript
js实现限定区域范围拖拉拽效果
2020/11/20 Javascript
Python面向对象之继承和组合用法实例分析
2018/08/27 Python
python write无法写入文件的解决方法
2019/01/23 Python
python安装pywin32clipboard的操作方法
2019/01/24 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
pytorch模型预测结果与ndarray互转方式
2020/01/15 Python
神经网络训练采用gpu设置的方式
2021/03/03 Python
纯CSS3制作的鼠标悬停时边框旋转
2017/01/03 HTML / CSS
Juice Beauty官网:有机美容产品,护肤与化妆品
2020/06/13 全球购物
加拿大户外探险购物网站:SAIL
2020/06/27 全球购物
院药学专业个人求职信
2013/09/21 职场文书
集体婚礼策划方案
2014/02/22 职场文书
模具设计与制造专业求职信
2014/07/19 职场文书
体育专业大学生职业生涯规划范文:打造自己的运动帝国
2014/09/12 职场文书
大学生见习报告范文
2014/11/03 职场文书
文明礼仪倡议书
2015/04/28 职场文书
运动会开幕式主持词
2015/07/01 职场文书
MongoDB支持的数据类型
2022/04/11 MongoDB
配置nginx负载均衡
2022/05/06 Servers