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刷新页面的实现代码(局部及全页面刷新)
Jul 11 Javascript
jQuery源码分析-04 选择器-Sizzle-工作原理分析
Nov 14 Javascript
extjs 时间范围选择自动判断的实现代码
Jun 24 Javascript
你所未知的3种Node.js代码优化方式
Feb 25 Javascript
Bootstrap开发实战之响应式轮播图
Jun 02 Javascript
原生javascript实现的ajax异步封装功能示例
Nov 03 Javascript
从零学习node.js之express入门(六)
Feb 25 Javascript
JavaScript实现简单生成随机颜色的方法
Sep 21 Javascript
代码详解JS操作剪贴板
Feb 11 Javascript
vue中关闭eslint的方法分析
Aug 04 Javascript
Vue.js上传图片到阿里云OSS存储的方法示例
Dec 13 Javascript
简述pm2常用命令集合及配置文件说明
May 30 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
js 代码集(学习js的朋友可以看下)
2009/07/22 Javascript
javaScript同意等待代码实现心得
2011/01/01 Javascript
js获取浏览器的可视区域尺寸的实现代码
2011/11/30 Javascript
不使用浏览器运行javascript代码的方法
2013/07/24 Javascript
js监控IE火狐浏览器关闭、刷新、回退、前进事件
2014/07/23 Javascript
AngularJS 中的指令实践开发指南(一)
2016/03/20 Javascript
详解Node.js如何开发命令行工具
2016/08/14 Javascript
Angular2  NgModule 模块详解
2016/10/19 Javascript
不使用script导入js文件的几种方法
2016/10/27 Javascript
Bootstrap实现的表格合并单元格示例
2018/02/06 Javascript
vue短信验证性能优化如何写入localstorage中
2018/04/25 Javascript
JS中使用cavas截图网页并解决跨域及模糊问题
2018/11/13 Javascript
微信小程序人脸识别功能代码实例
2019/05/07 Javascript
js+cavans实现图片滑块验证
2020/09/29 Javascript
Python实现建立SSH连接的方法
2015/06/03 Python
Python Queue模块详细介绍及实例
2016/12/27 Python
python调用虹软2.0第三版的具体使用
2019/02/22 Python
Python实现操纵控制windows注册表的方法分析
2019/05/24 Python
Python变量访问权限控制详解
2019/06/29 Python
在Python中构建增广矩阵的实现方法
2019/07/01 Python
Python实现链表反转的方法分析【迭代法与递归法】
2020/02/22 Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
2020/04/21 Python
一篇文章搞懂python的转义字符及用法
2020/09/03 Python
降低python版本的操作方法
2020/09/11 Python
英国电视和家用电器购物网站:rlrdistribution.co.uk
2018/11/20 全球购物
英国网上自行车商店:Tredz Bikes
2019/10/29 全球购物
打架检讨书400字
2014/01/17 职场文书
书法比赛获奖感言
2014/02/10 职场文书
《挑山工》的教学反思
2014/02/16 职场文书
写求职信要注意什么问题
2014/04/12 职场文书
环境保护标语
2014/06/20 职场文书
二手车交易协议书标准版
2014/11/16 职场文书
2015年班组建设工作总结
2015/05/13 职场文书
解决Tkinter中button按钮未按却主动执行command函数的问题
2021/05/23 Python
《模拟人生4》推出新补丁 “婚礼奇缘”DLC终于得到修复
2022/04/03 其他游戏
Windows Server 2012配置DNS服务器的方法
2022/04/29 Servers