1.关于this.$refs的使用场景1.关于this.$refs的使用场景如果ref属性加在普通元素上,那么this.$refs.name则指向该DOM元素

hello



hello

如果ref属性加在组件上,那么this.$refs.name指向该组件实例


2.为什么有时候通过this.$refs.name来获取会报错?2.为什么有时候通过this.$refs.name来获取会报错?一个比较常见的场景:在一个弹窗打开的时候立刻通过this.$refs来获取内容就会出现xxx is undefined的错误因为ref本身是作为渲染结果被创建的,在渲染的时候是不能访问的,因为他们还不存在!如果此时代码是需要这样来写代码,那么你可以在DOM渲染完毕后再进行获取
this.$nextTick(() => {
this.$refs.name... //DOM渲染完毕后就能正常获取了
})
this.$nextTick(() => {
this.$refs.name... //DOM渲染完毕后就能正常获取了
})补充知识:vue ref用法(this.$refs获取为空)补充知识:补充知识:vue ref用法(this.$refs获取为空)//6.14更新但是有个办法,我们可以使用
this.$nextTick(() => {

// todo
})

setTimeout(() => {

// todo
}, 0)
this.$nextTick(() => {

// todo
})

setTimeout(() => {

// todo
}, 0)来得到数据refref本身作为渲染结果被创建,在初始渲染的时候不能访问他们,是不存在的$refs不是响应式的,只在组件渲染完成后才填充用于元素或子组件注册引用信息,注册完成,将会注册在父组件$refs对象上如果你获取到的总是空的,你注意一下:1、你在哪里调用,和你调用的对象1、你在哪里调用,和你调用的对象试试在mounted()里面调用有效果没有调用的对象是本来就存在的,还是需要数据渲染之后才会出现的,同理,在mounted()里面调用看看2、调用对象是不是数组列表2、调用对象是不是数组列表我一开始设置ref在v-for列表上,直接获取this.$refs.name.style,永远是空的,后来才发现,this.$refs.name是一个数组,无法通过 .style 获取样式,只能遍历这个this.$refs.name数组,在this.$refs.name[index]上设置样式// 6.14 更新,这个说法有点问题// 6.14 更新,这个说法有点问题但是像高度宽度,可以通过offsetHeight,等来获取。3、调用对象是否和v-if结合使用3、调用对象是否和v-if结合使用ref不是响应式的,所有的动态加载的模板更新它都无法相应的变化。最后最后在使用中,我发现$refs.style只能设置该对象的样式,获取出来的值都是空的以上这篇Vue 解决通过this.$refs来获取DOM或者组件报错问题就是小编分享给大家的全部内容了,希望能给大家一个参考。