vue解决this.$refs.xx在mounted中获取DOM元素为undefined问题

 更新时间:2023年03月27日 08:53:56   作者:zxuanxuanz  
这篇文章主要介绍了vue解决this.$refs.xx在mounted中获取DOM元素为undefined问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

1.原因

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

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

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

如果说 mounted 阶段是加载阶段,那么 updated 阶段则是完成了数据更新到 DOM 的阶段(对加载回来的数据进行处理),此时,再使用 this.$refs.xx,就 100% 能找到该 DOM 节点。

updatedmounted 不同的是,在每一次的 DOM 结构更新,Vue.js 都会调用一次 updated 钩子函数!而 mounted 钩子函数仅仅只执行一次而已。

2.解决:使用$nextTick

Vue 实现响应式并不是数据发生变化之后 DOM 立即变化,而是按一定的策略进行 DOM 的更新。

$nextTick 是在下次 DOM 更新循环结束之后执行延迟回调,在修改数据之后使用 $nextTick,则可以在回调中获取更新后的 DOM。

3.动态绑定ref并使用v-for,使用this.$refs[refName]无法获取ref

原因

解决

将this.$refs[refName]改为this.$refs[refName][0]即可

总结

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

相关文章

  • VUE开发分布式医疗挂号系统后台管理页面步骤

    VUE开发分布式医疗挂号系统后台管理页面步骤

    本文从整体上介绍Vue框架的开发流程,结合具体的案例,使用Vue框架调用具体的后端接口,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • vue2实现provide inject传递响应式

    vue2实现provide inject传递响应式

    在看element-ui的源码的时候,注意到源码里面有很多地方使用provide和inject的属性,本文主要介绍了vue2实现provide inject传递响应式,分享给大家,感兴趣的可以了解一下
    2021-05-05
  • VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip

    VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip

    这篇文章主要介绍了VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • vue webpack打包原理解析(全网最新最全)

    vue webpack打包原理解析(全网最新最全)

    webpack是让我们可以进行模块化开发,并且会帮助我们处理模块间的依赖关系,这篇文章主要介绍了vue webpack打包原理,本篇介绍的有点长,希望大家耐心阅读
    2023-02-02
  • 前端实现pdf预览功能的全过程(基于vue)

    前端实现pdf预览功能的全过程(基于vue)

    这篇文章主要给大家介绍了关于前端实现pdf预览功能的相关资料,前端实现预览最好的效果还是PDF,不会出现一些文字错乱和乱码的问题,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • Vue.Draggable使用文档超详细总结

    Vue.Draggable使用文档超详细总结

    Vue拖拽组件(Draggable)是一个允许与View-Model同步进行拖放排序的Vue组件,下面这篇文章主要给大家介绍了关于Vue.Draggable使用文档的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • 在vue-cli中组件通信的方法

    在vue-cli中组件通信的方法

    本篇文章主要介绍了在vue-cli中组件通信的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • vue中keep-alive组件的入门使用教程

    vue中keep-alive组件的入门使用教程

    这篇文章主要给大家介绍了关于vue中keep-alive组件的入门使用教程,文中通过示例代码介绍的非常详细,对大家学习或者使用vue具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • vue自定义全局组件(自定义插件)的用法

    vue自定义全局组件(自定义插件)的用法

    这篇文章主要介绍了vue自定义全局组件(自定义插件)的用法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • vue项目启动如何设置默认启动页

    vue项目启动如何设置默认启动页

    这篇文章主要介绍了vue项目启动如何设置默认启动页问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06

最新评论