[避坑]Vue.js $refs能获取到对象但是子对象获取不到(undefined)的问题

Cejauh 发布于 2021-08-04 1388 次阅读


AI 摘要

在使用Vue.js的$refs属性时,你是否曾遭遇无法获取子对象的问题?本文将带你深入探讨这一常见的坑,让你在项目中避免不必要的困扰。通过真实案例,揭示如何在DOM元素存在的情况下巧妙地获取它们的高度和宽度。在解决这一问题的过程中,探索Vue.js渲染更新的奥秘,掌握更高效的编程技巧。你准备好填补这一知识空白了吗?一起学习成长吧!

写项目需要用ref获取dom对象来获取元素的属性,Vue的ref属性非常好用,但是今天碰到了问题。

<div v-for="(item, index) in items" :key="index">
    <div ref="content"> </div>
</div>

定义了以上循环,循环内有个div,写上了ref属性。

此时我在methods里写了接口来获取数据,数据到了之后,这个div就有宽度和高度了,我的目的是想取到里面这个div的高度和宽度

在created里写了如下方法

that.getItemList()
that.$nextTick(() => {
    that.divHeight = that.$refs.content[0].offsetHeight
}, false)

此时报错,提示 .content这个对象不存在。

我打印 that.$refs 发现content实际是有的,但是取不到。

在翻阅文档和资料后,找到解决办法:

在更新模板渲染的方法里才能取到,也就是说,在that.getItemList()这个方法里,有一段that.items = resultData。在这赋值之后紧接着获取refs,就可以获取到了。

这也算是个知识点了,写给自己备忘。

如果你跟我有相同的问题,并且看完文章还不明白解决不了,加我QQ10066267。我们共同学习。

May we meet again.
最后更新于 2025-05-07