首页 > 其他分享 >vue中this.$refs的使用方法和遇到的问题

vue中this.$refs的使用方法和遇到的问题

时间:2023-12-08 10:55:42浏览次数:24  
标签:nextTick vue 遇到 refs 获取 使用 组件 ref

this.$refs :用于操作真实的DOM节点。

 

在开发时碰到了一个小需求,需要子组件向父组件传参,而且是不需要通过事件传递的,一开始使用this.$emit()来写的,但是一直没有接受到参数,于是放弃了使用this.$emit()的使用。

 

于是,使用了在父组件中调用子组件的方法,来获取传递的参数。

 

一.关于this.$refs的使用场景

  1.如果ref属性加在普通元素上,那么this.$refs.name则指向该DOM元素

<p ref="p">hello</p>
<!-- this.$refs.p 指向该DOM元素 -->

  2.如果ref属性加在组件上,那么this.$refs.name指向该组件实例

<child-component ref="child"></child-component>
<!-- this.$refs.child 指向该组件 -->

  3.如何利用v-for和ref获取一组数组或者dom节点。注意:如果通过v-for遍历想加不同的ref时,需要使用冒号。即  :ref = 某变量

<div :ref="'test'+t.code" v-for="t in classList" :key="t.code"></div>

  在取值时怎么取?通过 this.$refs['test'+t.code]获取到的是一个数组

二.遇到的问题  :为什么有时候通过this.$refs.name来获取会报错?

  一个比较常见的场景:在一个弹窗打开的时候立刻通过this.$refs来获取内容就会出现xxx is undefined的错误

  因为ref本身是作为渲染结果被创建的,在渲染的时候是不能访问的,因为他们还不存在!

  如果此时代码是需要这样来写代码,那么你可以在DOM渲染完毕后再进行获取

  方法:

  1、使用this.$refs如果要在mouend()中使用,必须要在this.$nextTick(()=>{  } )   这里面实现,要不是找不到ref,原因是mouned()之后,BOM节点还没有完全挂载上,于是找不到定义的ref。

  2、可以直接在updata()的生命周期函数中使用,不用写this.$nextTick(()=>{  } ) 

  3、在methods:{  } 方法中使用,也需要使用this.$nextTick(()=>{  } ) 等到页面完全渲染完毕之后在调用即可

 

标签:nextTick,vue,遇到,refs,获取,使用,组件,ref
From: https://www.cnblogs.com/anna001/p/17884684.html

相关文章

  • matlab安装遇到的问题
    1.找到的资源大部分都是百度网盘,博主没钱,下个16a要下20年了善用搜索找到了阿里云链接的半小时下完了然后课设要给同学发所以需要u盘2.在给移动u盘的时候报错对于目标文件系统过大U盘修改为NTFS格式第一种方法:1、点击【开始】然后找到【运行】,或者是直接使用快捷键WIN+R打......
  • 倾斜摄影三维重建遇到常见的问题分析
    倾斜摄影三维重建遇到常见的问题分析 无人机倾斜摄影免像控点三维重建技术已经在许多领域得到广泛应用,包括土地测绘、城市规划、文化遗产保护等。然而,在实际应用中,仍然会遇到一些常见问题和挑战。本文将针对这些问题进行分析,并提供解决方案。1、图像质量不佳:无人机倾斜摄影需......
  • 记录一下工作遇到的一个小bug,DataGrid的DataGridCheckBoxColumn 问题
    <DataTemplatex:Key="CheckBoxDataTemplate"><Grid><CheckBoxClick="CheckBox_Checked"IsChecked="{BindingIsSelect,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}"><......
  • vue-django 前端bootstrap配置
    2、前端引入bootstrap下载bootstrap源码,放在vue中的src目录中https://v5.bootcss.com/docs/getting-started/download/https://getbootstrap.net/docs/getting-started/introduction/在vue根目录修改main.jsimport{createApp}from'vue'importAppfrom'./App.vue'im......
  • OpenTiny Vue 3.12.0 发布:文档大优化!增加水印和二维码两个新组件
    你好,我是Kagol。非常高兴跟大家宣布,2023年11月30日,OpenTinyVue发布了v3.12.0......
  • 【Nginx/IIS】解决uniapp/Vue history模式下页面刷新404
    uniapp/Vue开启History模式本地开发:二级页面刷新或者通过链接进入二级页面是正常的打包部署后:二级页面刷新或者通过链接进入二级页面会报错404页面找不到 解决方案:Nginx配置:在nginx.conf的对应location里配置一行代码try_files$uri$uri//index.html;location/h5{......
  • vue2项目打包dist文件后如何部署访问(本地部署和网络部署)
    1.本地部署前提:1.注意端口的占用,防火墙的放行;2.注意后端服务的请求链接3.记得不要关闭运行4.记得elementui的引入要放在vue版本导入的后面1.1.新建一个文件夹打开之后打开终端编辑1.2.npmiexpress-s是用于在Node.js项目中安装Express框架的命令编辑1.3.将项目打包好的dist......
  • vue3视频播放器组件vue-video-player
    1、安装npmivue3-video-play--save2、全局注册importvue3videoPlayfrom'vue3-video-play'//引入组件import'vue3-video-play/dist/style.css'//引入cssapp.use(vue3videoPlay)3、使用<vue3VideoPlaywidth="1210px"......
  • 如何使用Visual Studio 2022创建基本Vue.js.Web应用程序
    最近接了个物联网项目,需要用到   VUEAnt-Design 对于vue没有概念 只能查找相关  vue.js的知识。 了解vue.js的前提条件 是要对  HTML+CSS+Jscript有一定的知识储备。所以又去看了看对应的三剑客(HTML+CSS+Jscript)。跟着vue.js官网学习了一下,就......
  • 基于vue2开发的html5页面实现微信分享卡片(微信好友+朋友圈+qq好友+qq空间)
    首先附上文档链接:1.微信官方文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#1112.免费生成二维码的草料官网:https://cli.im/text/other 需求:在浏览器分享链接时携带用户id(因为是拉人活动,需要给用户积分),并且在微信中分享为卡片模式 具体......