首页 > 其他分享 >Vue中的$refs 用法

Vue中的$refs 用法

时间:2023-12-22 14:23:56浏览次数:27  
标签:Vue DOM refs 用法 实例 组件 模板

Vue中的$refs 用法

Vue中的$refs原理涉及到Vue实例的生命周期、虚拟DOM以及一些底层的JavaScript原理。

  1. Vue实例的生命周期: 当Vue实例被创建时,它会经历一系列的生命周期钩子,包括beforeCreatecreatedbeforeMountmounted等。在mounted生命周期钩子中,Vue实例的模板已经渲染到真实的DOM上,此时$refs会被填充。

  2. 模板编译: Vue的模板编译过程将模板转换为渲染函数,这个渲染函数生成虚拟DOM。在编译过程中,识别到有ref属性的元素或组件,Vue会在实例的$refs对象上创建相应的引用。

  3. 虚拟DOM与真实DOM关联: Vue使用虚拟DOM来高效地更新实际的DOM。当模板渲染到真实DOM上后,Vue会建立虚拟DOM与真实DOM的关联关系。这时,ref属性的元素或组件的引用被保存在Vue实例的$refs对象上。

  4. $refs的填充:mounted生命周期钩子中,Vue实例的$refs对象已经被填充,可以通过this.$refs访问这些引用。

举个例子,如果有以下模板代码:

<template>
  <div>
    <my-component ref="md"></my-component>
    <button ref="myButton">Click me</button>
  </div>
</template>

mounted钩子执行后,this.$refs将包含两个引用:mdmyButton,分别指向<my-component>组件实例和<button>元素。

总的来说,$refs的原理涉及Vue实例生命周期、模板编译、虚拟DOM和真实DOM的关联过程。这使得我们能够在Vue组件中方便地访问子组件或DOM元素的引用。

举个例子

1703141320455_66ABC850-169A-4118-8302-53B1F6B9ED7B

在Vue中,$refs是一个特殊的对象,用于访问在模板中使用ref属性声明的子组件或DOM元素。而你提到的$refs.md中的.md可能是指某个具体的子组件或者DOM元素的引用。

proxy.$refs.md.$img2Url(pos, res.data): 使用 Vue 中的 $refs 来获取名为 md 的子组件,并调用其 $img2Url 方法,传递位置 (pos) 和上传成功的数据 (res.data)。

proxy.$modal.msgSuccess("上传成功"): 使用 Vue 实例中的 $modal 对象,调用 msgSuccess 方法,显示上传成功的提示消息。

假设你在模板中有这样的代码:

<template>
  <div>
    <my-component ref="md"></my-component>
  </div>
</template>

在这个例子中,$refs.md将会是对<my-component>组件实例的引用。你可以通过这个引用来访问和操作<my-component>组件的属性和方法。

如果你的代码中有其他使用ref属性的元素或组件,那么$refs对象将包含对这些元素或组件的引用,每个引用的键名就是ref属性的值。



欢迎关注公-众-号【TaonyDaily】、留言、评论,一起学习。

公众号

Don’t reinvent the wheel, library code is there to help.

文章来源:刘俊涛的博客


若有帮助到您,欢迎点赞、转发、支持,您的支持是对我坚持最好的肯定(_)

标签:Vue,DOM,refs,用法,实例,组件,模板
From: https://www.cnblogs.com/lovebing/p/17921486.html

相关文章

  • [VUE] WebPack 打包后自动修改 dist 中 package.json 版本号
    我们在开发npm包时,开发期的package.json通常并不一定是发布到npm仓库的package.json。这种情况下每次改版本号需要改两个地方,比较麻烦。我一般使用webpack进行打包,所以有了下面这个小插件。插件源码modify.version.plugin.js/**修改版本号webpack插件*/functi......
  • 巧妙使用Vue.extend继承组件实现el-table双击可编辑(不使用v-if和v-else)
    问题描述有一个简单的表格,产品要求实现双击可编辑看了一下网上的帖子,大多数都是搞两部分dom,一块是输入框,用于编辑状态填写;另一块是普通标签,用于在不编辑显示状态下呈现单元格文字内容。再加上一个flag标识搭配v-if和v-else去控制编辑状态、还是显示状态。大致代码如下:<el-t......
  • static关键字在C/C++中的用法
    在C++中,static关键字有几种不同的用法:1.静态(局部)变量在函数内部声明的变量或类中声明的变量前加上static,表示这个变量的生命周期为整个程序运行期间,而不是仅在函数执行期间。静态变量在第一次调用时初始化,之后保持其值直到程序结束。voidfunc(){staticintcount......
  • vue3 + java 查询数据前后端时间不一致如何解决?
    环境:vue3+springboot+mybatis+mysql 场景:后端返回的时间与前端接收到的时间,小时不一致,时间格式是古巴标准时间:"CST"解决:在Entity中时间字段上增加注解:@JsonFormat(pattern="yyyy-MM-ddHH:mm:ss",timezone="GMT+8")......
  • vue实现大文件分片上传与断点续传到七牛云
    问题:前段时间做视频上传业务,通过网页上传视频到服务器。视频大小小则几十M,大则1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1、文件过大,超出服务端的请求大小限制;2、请求时间过长,请求超时;3、传输中断,必须重新上传导致前功尽弃;探索过程:1、原先咨询过组里的大佬给......
  • if的用法
    if的多循环结构publicstaticvoidmain(String[]args){    Scannerscanner=newScanner(System.in);//创建一个扫描器对象,用于接受键盘数据    System.out.println("请输入成绩:");    intscore=scanner.nextInt();    if(score==100){......
  • vue3调用高德地图,实现地址,经纬度填写
    父组件引用高德地图:1<template>2<divclass="wrapper">3<divclass="box">4<divclass="form-box">5<el-form6label-position="top"7:inline=&qu......
  • 前端 vue项目启动报错 spawn cmd ENOENT 的原因以及解决方案
    前端项目启动到一半的时候卡在跳转浏览器出现了这个问题 那么问题大概率就是你环境刚配置或者配置错了的问题,这个时候只需要找到我的电脑=>属性=>高级系统设置=>环境变量=>系统变量=>PATH环境=>双击进去=>添加环境变量=> 添加这俩个 C:\Windows\System......
  • Vue + Django 使用wangeditor 上传图片 显示跨域报错
    报错:newsDetailed:1 AccesstoXMLHttpRequestat'http://www.py32api.com:8000/users/uploadFile/'fromorigin'http://localhost:8080'hasbeenblockedbyCORSpolicy:RequestheaderfieldtokenisnotallowedbyAccess-Control-Allow-Head......
  • scanner的用法
    scanner的用法定义一个scannerScannerscanner=newScanner(system.in)字符串用法publicclassDemo01{  publicstaticvoidmain(String[]args){    Scannerscanner=newScanner(System.in);//创建一个扫描器对象,用于接受键盘数据    System.out......