没有合适的资源?快使用搜索试试~ 我知道了~
首页Vue 解决通过this.$refs来获取DOM或者组件报错问题
Vue 解决通过this.$refs来获取DOM或者组件报错问题
1w+ 浏览量
更新于2023-05-25
评论
收藏 52KB PDF 举报
主要介绍了Vue 解决通过this.$refs来获取DOM或者组件报错问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
资源详情
资源评论
资源推荐

Vue 解决通过解决通过this.$refs来获取来获取DOM或者组件报错问题或者组件报错问题
主要介绍了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 更新,这个说法有点问题


















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0