Vue中获取this.$refs为undefined的问题

 更新时间:2023年05月19日 09:07:03   作者:在南没有北  
这篇文章主要介绍了Vue中获取this.$refs为undefined的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Vue获取this.$refs为undefined

最近在修改bug的时候,需要获取到dom元素进行操作

条件是通过屏幕宽度来改变获取到dom元素的定位位置,我选择通过JS的方式去改变

  • HTML代码
<div ref = "mydiv"></div>
  • JS
created(){ 
    console.log(this.$refs.mydiv)
}

控制台打印的时候为undefined

然后开始检查字母和用法,发现都没有问题,就只有在 methods 函数里面也打印一下,这个时候发现打印就完全没问题,也得到我想得到的了,那问题应该就出在生命周期函数 created 上了,去查阅资料,果不其然

这个时候就需要说一下两个生命周期函数了:

  • created (实例创建成功,此时 data 中的数据显示出来了,dom还未生成)
  • mounted(dom生成,data数据在模板中显示出来)

如果在created方法里this.$refs[dom]去获取dom节点是获取不到的

因为dom还没有被渲染出来,而在mounted方法里是可以拿到的

Vuejs this.$refs 调用报undefined的处理

项目场景

Vue 2.6.10版本中,父组件获取子组件问题。

问题描述

父组件调子组件方法报undefined找不到

父组件中使用子组件代码  <UploadFile ref="refupload" ></UploadFile>

报错:

先console.log(this.$refs);发现外面没有refupload,里面有对象,不是undefined。

然后直接通过console.log(this.$refs.refupload);输出,结果undefined报错。

原因分析

外层有v-if包裹,导致未渲染报错。

解决方案

初步错误的尝试:仅使用this.$nextTick方法,结果还是获取undefined

有效方案1:使用this.$nextTick,但需要注意v-if条件中参数的赋值需要和this.$nextTick在同一个方法体中!

有效方案2:v-show 替换掉v-if

 

拿到输出结果:

总结

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

相关文章

  • Vue路由传递query参数两种方式

    Vue路由传递query参数两种方式

    路由是可以传递参数的,一般使用query进行传参,有两种方式,本温酒通过代码示例给大家介绍这两种传递方式,感兴趣的小伙伴可以参考阅读
    2023-06-06
  • vue中EventBus的使用教程详解

    vue中EventBus的使用教程详解

    在Vue中,使用EventBus可以实现组件间的通信,如何使用EventBus? 都需要做哪些配置呢?他的注意事项是什么呢?下面就跟随小编一起学习一下吧
    2024-02-02
  • vue2.0 路由不显示router-view的解决方法

    vue2.0 路由不显示router-view的解决方法

    下面小编就为大家分享一篇vue2.0 路由不显示router-view的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • 深入浅析Vue中的slots/scoped slots

    深入浅析Vue中的slots/scoped slots

    这篇文章主要介绍了Vue中的slots/scoped slots,本文实例代码相结合的形式给大家介绍了slots的工作原理,需要的朋友可以参考下
    2018-04-04
  • vue3+ts使用bus事件总线的示例代码

    vue3+ts使用bus事件总线的示例代码

    这篇文章主要介绍了vue3+ts使用bus事件总线,文中给大家提到了vue总线机制(bus)的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • 基于vue-video-player自定义播放器的方法

    基于vue-video-player自定义播放器的方法

    这篇文章主要介绍了基于vue-video-player自定义播放器的方法,主要是基于video.js开发的vue-video-player的使用,以及如何操作video.js中的api。需要的朋友可以参考下
    2018-03-03
  • 简单的三步vuex入门

    简单的三步vuex入门

    通过简单的三步让大家对VUEX快速的入门,本文还介绍了VUEX的最基础的函数以及相关知识点,有兴趣的学习下。
    2018-05-05
  • Vue ElementUI table实现表格斜线分隔线

    Vue ElementUI table实现表格斜线分隔线

    这篇文章主要为大家详细介绍了Vue ElementUI table实现表格斜线分隔线,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Vue2.x中的父子组件相互通信的实现方法

    Vue2.x中的父子组件相互通信的实现方法

    这篇文章主要介绍了Vue2.x中的父子组件相互通信,需要的朋友可以参考下
    2017-05-05
  • 使用vue实现grid-layout功能实例代码

    使用vue实现grid-layout功能实例代码

    这篇文章主要介绍了使用vue实现grid-layout功能的代码讲解,需要的朋友可以参考下
    2018-01-01

最新评论