Vue 解决通过this.$refs来获取DOM或者组件报错问题
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或者组件报错问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Vue + element实现动态显示后台数据到options的操作方法
最近遇到一个需求需要实现selector选择器中选项值options 数据的动态显示,而非写死的数据,本文通过实例代码给大家分享实现方法,感兴趣的朋友一起看看吧2021-07-07vue-router vuex-oidc动态路由实例及功能详解
这篇文章主要为大家介绍了vue-router vuex-oidc动态路由实例及功能详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-11-11vue3中update:modelValue的使用与不生效问题解决
现在vue3的使用越来越普遍了,vue3这方面的学习我们要赶上,下面这篇文章主要给大家介绍了关于vue3中update:modelValue的使用与不生效问题的解决方法,需要的朋友可以参考下2022-03-03elementui 开始结束时间可以选择同一天不同时间段的实现代码
这篇文章主要介绍了elementui 开始结束时间可以选择同一天不同时间段的实现代码,需要先在main.js中导入相应代码,代码简单易懂,需要的朋友可以参考下2024-02-02
最新评论