关于vue中ref的使用(this.$refs获取为undefined)

 更新时间:2022年03月25日 15:11:23   作者:蕾蕾是个程序员  
这篇文章主要介绍了关于vue中ref的使用(this.$refs获取为undefined),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

vue的ref(this.$refs获取为undefined)

如果你获取到的总是空的,你注意一下:

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不是响应式的,所有的动态加载的模板更新它都无法相应的变化。

解决方案:

通过

setTimeout(() => {

    }, 0)

来得到数据

vue的$refs属性几个注意点

1.在vue中获取dom推荐使用$refs来获取

可是有时会出现 this.$refs.xxx 为undefined的情况。

场景1:在created()里使用

在这个生命周期中进行数据观测 ,属性和方法的运算,watch 事件回调。但是页面还没有挂载上去,没有e l 属 性 , t h i s . el 属性,this.el属性,this.refs无法调用dom。

解决办法:换成在mounted()里使用

场景2:父元素或当前元素使用了v-if或v-show

因为$refs不是响应式的,只在组件渲染完成后才会生效,在初始渲染的时候是不存在的。

因为是非响应式的,所有动态加载的模板更新它都无法相应的变化。

解决办法:可以通过setTimeout(()=>{…}, 0)来实现。

2.如果使用v-for

遍历加ref时可以使用 :,即 :ref ="variable" ,这样得到的是不同的ref。

<div v-for="(item,index) in arr" :key="index">
  <child  :ref="`refName${index}`"/>
</div>
//this.$refs[`refName${index}`]每一项都是一个仅包含一个元素的数组
this.$refs[`refName${index}`][0].fun();//调用第一个组件内的方法

但是也可以不使用 :,这时得到的 ref 将会是一个包含了对应数据源的这些子组件的数组。

<div v-for="(item,index) in arr" :key="index">
  <child  ref="refName"/>
</div>
//this.$refs.refName是一个包含了对应数据源的这些子组件的数组
this.$refs.refName[0].fun();//调用第一个组件内的方法

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 关于vue跳转后页面置顶的问题

    关于vue跳转后页面置顶的问题

    这篇文章主要介绍了关于vue跳转后页面置顶的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • vue-router之实现导航切换过渡动画效果

    vue-router之实现导航切换过渡动画效果

    今天小编就为大家分享一篇vue-router之实现导航切换过渡动画效果,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • 使用vue.js在页面内组件监听scroll事件的方法

    使用vue.js在页面内组件监听scroll事件的方法

    今天小编就为大家分享一篇使用vue.js在页面内组件监听scroll事件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • Vue实现浏览器端扫码功能

    Vue实现浏览器端扫码功能

    本文主要介绍,通过使用基于 vue技术栈的前端开发技术,在浏览器端调起摄像头,并进行扫码识别功能,对识别到的二维码进行跳转或其他操作处理,对vue浏览器扫码功能的实现代码感兴趣的朋友一起看看吧
    2021-10-10
  • 详解Weex基于Vue2.0开发模板搭建

    详解Weex基于Vue2.0开发模板搭建

    这篇文章主要介绍了详解Weex基于Vue2.0开发模板搭建,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • element-ui 上传图片后清空图片显示的实例

    element-ui 上传图片后清空图片显示的实例

    今天小编就为大家分享一篇element-ui 上传图片后清空图片显示的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • 详解Vue.js之视图和数据的双向绑定(v-model)

    详解Vue.js之视图和数据的双向绑定(v-model)

    本篇文章主要介绍了Vue.js之视图和数据的双向绑定(v-model),使用v-model指令,使得视图和数据实现双向绑定,有兴趣的可以了解一下
    2017-06-06
  • Vue2和Vue3的10种组件通信方式梳理

    Vue2和Vue3的10种组件通信方式梳理

    这篇文章主要介绍了Vue2和Vue3的10种组件通信方式梳理,本文将通过选项式API 组合式API以及setup三种不同实现方式全面介绍Vue2和Vue3的组件通信方式,需要的朋友可以参考一下
    2022-08-08
  • VUE+Element实现增删改查的示例源码

    VUE+Element实现增删改查的示例源码

    这篇文章主要介绍了VUE+Element实现增删改查的示例源码,帮助大家更好的理解和使用vue,感兴趣的朋友可以了解下
    2020-11-11
  • 浅谈webpack SplitChunksPlugin实用指南

    浅谈webpack SplitChunksPlugin实用指南

    这篇文章主要介绍了浅谈webpack SplitChunksPlugin实用指南,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09

最新评论