vue中使用refs定位dom出现undefined的解决方法

 更新时间:2017年12月21日 11:23:33   作者:Lighter_Studio  
本篇文章主要介绍了vue中使用refs定位dom出现undefined的解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

之前在公司做项目,一直感觉用ref来定位dom节点挺方便的。但是期间遇到了一个问题,就是在mounted(){}钩子里面使用this.$refs.xxx,打印出来的却是undefined?

于是我就对比了一下之前使用ref定位的.vue文件,发现了他们之间的区别。

我们要想知道为什么会定位不到某个DOM节点,我们首先要理解mounted(){}这个钩子函数是用来做什么的。

下面是vue官方给出的vue生命周期(部分),正如官方所说的一样,一开始不必先理解,不过随这你的学习与使用,他的参考价值会越来越高。

 

原来,mounted阶段,DOM结构准备就绪,但是这里的准备就绪需要特别说明一下:

DOM结构已经出来了,但是如果在DOM结构中的某个DOM节点使用了v-if、v-show或者v-for(即根据获得的后台数据来动态操作DOM,即响应式),那么这些DOM是不会再mounted阶段找到的。

此时的mounted阶段,一般是用于发起后端请求,拿回数据,配合路由钩子做一些事情,简单来说就是在mounted钩子中加载数据而已,加载回来的数据是不会再这个阶段更新的DOM中的

所以如果在mounted钩子中使用$refs,如果ref是定位在有v-if、v-for、v-show中的DOM节点,返回来的只能是undefined,因为在mounted阶段他们根本不存在!!

经过检验,上面端文字是错误的,$refs定位不到的主要原因是因为v-if、v-for、v-show这些语句如果依赖父组件传来的参数的话,该该参数是在mounted()阶段子还没获取得到~~~~!!!!

如果想要真正地在DOM加载完成后拿到数据,就需要调用VUE的全局api : this.$nextTick(() => {})

如果说mounted阶段是加载阶段,那么updated阶段则是完成了数据更新到DOM的阶段(对加载回来的数据进行处理),此时,ref、数据等等全部都挂载到DOM结构上去,在update阶段使用this.$refs.xxx,就100%能找到该DOM节点。

updated与mounted不同的是,在每一次的DOM结构更新,vue都会调用一次updated(){}钩子函数!而mounted仅仅只执行一次而已

简单来说,只要在调试的时候,能看到元素的存在,在updated阶段都可以使用this.$refs.xxx找到对应的DOM节点!

关于$refs的使用,官方文档特别给出了以下提示:

 

使用的时候就注意咯- -

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 深入了解Vue3中props的原理与使用

    深入了解Vue3中props的原理与使用

    props指父组件往子组件中传入参数,这篇文章主要为大家介绍了vue3中props的原理与使用,文中的示例代码讲解详细,感兴趣的可以了解一下
    2023-05-05
  • el-select与el-tree结合使用实现树形结构多选框

    el-select与el-tree结合使用实现树形结构多选框

    我们在实际开发中需要用到下拉树,elementUI是没有这个组件的,我们就要自己去写了,下面这篇文章主要给大家介绍了关于el-select与el-tree结合使用实现树形结构多选框的相关资料,需要的朋友可以参考下
    2022-10-10
  • vue虚拟化列表封装的实现

    vue虚拟化列表封装的实现

    这篇文章主要介绍了vue实现虚拟化列表封装方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Vue过滤器filters的用法及时间戳转换问题

    Vue过滤器filters的用法及时间戳转换问题

    Vue的filters过滤器是比较常见的一个知识点,下面我将结合时间戳转换的例子带你快速了解filters的用法,感兴趣的朋友一起看看吧
    2021-09-09
  • vue中通过iframe方式加载本地的vue页面的解决方法

    vue中通过iframe方式加载本地的vue页面的解决方法

    这篇文章主要给大家介绍了在vue中如何通过iframe方式加载本地的vue页面的解决方法,文中有详细的解决流程,需要的朋友可以参考下
    2023-06-06
  • 解决修改el-pagination显示文字的问题

    解决修改el-pagination显示文字的问题

    这篇文章主要介绍了解决修改el-pagination显示文字的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • vue3+vite项目H5配置适配步骤详解

    vue3+vite项目H5配置适配步骤详解

    这篇文章主要为大家介绍了vue3+vite项目H5配置适配步骤详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • vue项目中常见问题及解决方案(推荐)

    vue项目中常见问题及解决方案(推荐)

    这篇文章主要介绍了vue项目中常见问题及解决方案,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • elementUI el-form 数据无法赋值且不报错解决方法

    elementUI el-form 数据无法赋值且不报错解决方法

    本文主要介绍了elementUI el-form 数据无法赋值且不报错解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-12-12
  • Vue使用epubjs电子书的教程详解

    Vue使用epubjs电子书的教程详解

    EPUB.js是一个基于JavaScript的库,用于从电子书中提取内容,这篇文章主要为大家详细介绍了vue如何使用epubjs实现电子书的功能,感兴趣的小伙伴可以学习一下
    2023-11-11

最新评论