首选要知道this.$refs是干什么的?

ref有三种用法:

1、ref 加在普通元素上,用this.$refs.name 获取到的是dom元素

2、ref 加在子组件上,用this.$refs.name 获取到的是组件实例,可以使用组件的所有方法

3、利用v-for和ref可以获取一组数组或者dom节点 

当v-for用于元素或者组件时,引用信息将是包含DOM节点或组件实例数组。

ref本身是作为渲染结果被创建的,在初始渲染的时候你不能访问他们---因为他们还不存在;$refs也不是响应式的,因此不能试图用它在模板中做数据绑定

获取到的总是undefined的

1、 你在哪里调用的,和你调用的对象

试试在 mounted() 里面调用有效果没有;

调用的对象本身就存在的,还是需要数据渲染之后才出现的;同理在 mounted() 里面调用,或者在this.$nextTick( () => { ... } ) 调用

2、调用的对象是否和 v-for 结合使用,或者调用对象是不是数组列表

假如我现在设置 ref 在v-for上,直接获取 this.$refs.name.style,永远都是空的;

因为 this.$refs.name是一个数组,无法通过 .style 获取;

可以动态绑定 ref 和使用 v-for,使用 this.$refs[refName][index] 获取;

3、调用的对象是否和 v-if 结合使用

ref不是响应式的,所有动态加载的模板更新它都无法相应的变化;

解决:更换为 v-show 即可

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐