7.Vue------$refs与$el详解 ------vue知识积累
$refs 与 $el是什么? 作用是什么? ref,$refs,$el ,三者之间的关系是什么?
ref (给元素或者子组件注册引用信息) 就像你要给元素设置样式,就需要先给元素设定一个 class 一样,同理,你想获取哪个元素的 DOM,就给这个元素先设定一个 ref,其实这里和 JS 中的 document.各种方法获取 DOM 差不多,不过 ref 是访问 VUE 虚拟出来的DOM,这样可以有效的减少性能消耗。
简述三者区别:
- ref :是 元素的属性,用于设置在元素上
- $refs :是 ref 的集合,集合里面包含了当前.vue中的所有 ref用于获取普通元素中的 DOM 以及 子组件中方法/参数的
- $el :是 用于获取组件内 DOM(包括子组件,当前.vue组件,以及父组件)
1:点击按钮“确定”触发其他元素上的事件
<template><div class="content"><div><el-button type="success" @click="handleSubmit">确定</el-button><!-- 设定 ref="passA" elementui组件按钮--><el-button ref="passA" type="success" @click="handlePassA">被触发 A</el-button></div><!-- 设定 ref="passB" 普通按钮触发事件 --><div style="height:40px; width:100px; background: burlywood;" ref="passB" @click="handlePassB">被触发 B</div></div>
</template>
handleSubmit(){/** 有同学看到这里会问:咦,博主,你这里写法为什么不同呀?* 嗯,这位同学不错,问到正题上了,避免了你在实际运用中出现问题* 因为 ref="passA" 的按钮,它是 element ui 提供的组件,* 组件本身不是 DOM,所以需要 .$el 的帮助后才能提取组件的 DOM* 反之,对于提取普通元素上的 DOM ,就不需要了*/this.$refs.passA.$el.click()this.$refs.passB.click()console.log(this.$refs)
},
handlePassA(){console.log('我是 PassA, 我报触发了')console.log('我自己的高度 =>',this.$refs.passA.$el.offsetHeight)
},
handlePassB(){console.log('我是 PassB, 我报触发了')console.log('我自己的高度 =>',this.$refs.passB.offsetHeight)
},

2.页面加载,获取当前.vue文件中整体元素高度
mounted(){/** 这里通过 this.$el 直接获取当前.vue文件整体 DOM*/console.log(this.$el)console.log('我是 当前.vue文件 整体的高度 =>',this.$el.offsetHeight)console.log('我是 PassB 我自己的高度 =>',this.$refs.passB.offsetHeight)
},

这里通过 class=“content” 与上图中控制台输出的 整体DOM最外层的 calss 比照,可以更好的理解

3.父组件,调用子组件内的方法/参数(这里的例子是页面加载直接调用)
子组件:
<template><div><div class="border"><div>我是子组件</div> <input v-model="value" /></div></div>
</template><script>import {mapGetters} from 'vuex'export default {name: 'user-defined',data() {return {value: 0,list: [1,2,3,4]}},methods: {handleAddNum(){console.log('我是子组件里的方法')this.value = this.value + 1;// 获取父组件DOMlet parentDom = this.$parent.$el;}}
}
</script>
<style scoped lang="scss">
.border{width: 300px;height: 200px;border: 1px solid red;
}
</style>
父组件:
<template><div class="content"><div><el-button type="success" @click="handleSubmit">確定</el-button><!-- 设定 ref="passA" --><el-button ref="passA" type="success" @click="handlePassA">被触发 A</el-button></div><!-- 设定 ref="passB" --><div style="height:40px; width:100px; background: burlywood;" ref="passB" @click="handlePassB">被触发 B</div><!-- 子组件 设定 ref="userDefined" --><user-defined ref="userDefined"></user-defined></div>
</template><script>
import userDefined from './user-defined.vue' // waves directive
import {mapGetters} from 'vuex'export default {name: 'AdminPassword',components: {userDefined},mounted(){// 调用 子组件方法this.$refs.userDefined.handleAddNum()// 调用 子组件list参数console.log(this.$refs.userDefined.list)// 输出 $refs 内的集合console.log(this.$refs)},methods: {handleSubmit(){this.$refs.passA.$el.click()this.$refs.passB.click()console.log(this.$refs)},handlePassA(){console.log('我是 PassA, 我报触发了')console.log('我自己的高度 =>',this.$refs.passA.$el.offsetHeight)},handlePassB(){console.log('我是 PassB, 我报触发了')console.log('我自己的高度 =>',this.$refs.passB.offsetHeight)},}
}
</script>

4.什么情况/场景中使用 this.$nextTick(()=>{}),它的作用是什么?
<template><div class="content"><!-- elementui中的组件按钮 --><el-button type="success" @click="handleSubmit">获取下方div中文本</el-button><!-- 设定 ref="myDiv" 普通按钮--><div ref="myDiv" style="width: 100px; height: 40px; border: 1px solid red;">{{text}}</div></div>
</template>
data(){return{text: '我今年12岁'}
},
methods: {handleSubmit(){/** 为什么我打印出来的不是 【我今年13岁】 呢?* 因为 DOM 的值还没有更新完毕,所以这里打印的依然是【我今年12岁】*/this.text = '我今年13岁'console.log('打印 =>',this.$refs.myDiv.innerHTML) // 打印结果:我今年12岁}
}

created(){console.log('created =>',this.$refs.myDiv)/** 因为生命周期执行顺序的缘故,vue 实例刚刚创建完毕 , DOM 还没有进行渲染,所以* 打印结果:created => undefined* 如果你在这里输出 this.$refs.myDiv.innerHTML 控制台还会报错,提示 myDiv 不存在*/this.$nextTick(()=>{console.log('created =>',this.$refs.myDiv.innerHTML)/** this.$nextTick 监视 DOM 的更新* 会进入 红灯停状态,DOM 更新完毕后,就会进入 绿灯行驶状态* 打印结果:created => 我今年12岁*/})
},
methods: {handleSubmit(){this.text = '我今年13岁'/** this.$nextTick 的作用是什么?* 它的作用类似:前方道路正在施工,施工完毕后可正常行驶* DOM 更新完毕后,就会执行 this.$nextTick 内的代码*/this.$nextTick(()=>{console.log('打印 =>',this.$refs.myDiv.innerHTML) // 打印结果:我今年13岁})}
}

相关文章:
7.Vue------$refs与$el详解 ------vue知识积累
$refs 与 $el是什么? 作用是什么? ref,$refs,$el ,三者之间的关系是什么? ref (给元素或者子组件注册引用信息) 就像你要给元素设置样式,就需要先给元素设定一个 class 一样,同理,…...
一个很好的直接网站操作的回测框架
1 网址 https://cn.tradingview.com/...
【电子元器件】贴片电阻的故障现象、故障原理和解决方法
本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时,也能帮助其他需要参考的朋友。如有谬误,欢迎大家进行指正。 一、故障现象概要 贴片电阻与其他电子元器件相比,虽然属于比较不容易引发故障的零部件,但是在过载或…...
基于Spring Boot + Vue的摄影师分享交流社区的设计与实现
博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有实…...
SpringBoot项目监听端口接受数据(Netty版)
文章目录 前言服务端相关配置核心代码 客户端 前言 前言 环境: JDK:64位 Jdk1.8 SpringBoot:2.1.7.RELEASE Netty:4.1.39.Final 功能: 使用Netty监听端口接受客户端的数据,并发送数据给客户端。 服务端 …...
超标量处理器设计笔记(9) 重命名映射表、超标量处理器重命名中相关性问题
寄存器重命名 重命名映射表基于 SRAM 的重命名映射表 超标量处理器的寄存器重命名解决 RAW 相关性解决 WAW 相关性对写 RAT 进行检查(判断哪个 ARF 写入到 RAT)对写 ROB 进行检查(判断) 特殊指令处理方式 重命名映射表 重命名时…...
如何使用 Python 写入文本文件 ?
在Python编程中,写入文本文件是一项基本且重要的操作。 无论是生成日志文件、配置文件,还是进行数据输出,都需要用到这一技能。 下面,我将详细介绍如何使用Python写入文本文件,并提供一些实际开发中的建议和注意事项…...
07篇(附)--仿射变换矩阵
此篇献给某些 头铁 的小只因们,认真钻研下面的数学式吧 原理示例 首先我们以最简单的一个点的旋转为例子,且以最简单的情况举例,令旋转中心为坐标系中心O(0,0),假设有一点P0(x0,y0)࿰…...
KubeSphere搭建单节点RocketMQ
前提环境: Docker环境 Harbor仓库(可选) 参考官方文档: 《Docker 部署 RocketMQ》 https://rocketmq.apache.org/zh/docs/quickStart/02quickstartWithDocker参考官方文档: 《RocketMQ Dashboard》 https://rocketmq.apache.org/zh/docs/deploymentOperations/04Dashboard/ 声…...
深度学习中损失函数(loss function)介绍
深度学习中损失函数(loss function)介绍 在深度学习的宏伟城堡中,损失函数扮演着国王的角色,它决定了模型训练的方向和目标。损失函数,也被称为代价函数,是衡量模型预测与实际结果之间差异的函数。在深度学习的训练过程中&…...
Vue3+Node中使用webrtc推流至mediamtx
前言 项目的 Web 端是 Vue3 框架,后端是 GO 框架。需要实现将客户端的本地摄像头媒体流推送至服务端,而我自己从未有媒体流相关经验,最初 leader 让我尝试通过 RTSP 协议推拉流,我的思路就局限在了 RTSP 方向。 最初使用的服务端…...
React 内置的Hook学习
useState:管理组件状态 useState 是一个用于在函数组件中添加状态的 Hook。它允许你在函数组件中声明一个状态变量,并提供一个更新该状态的方法,其中与组件生命周期的关系: 初始化:当组件首次渲染时,useS…...
Flutter Navigator2.0的原理和Web端实践
01 背景与动机 在Navigator 2.0推出之前,Flutter主要通过Navigator 1.0和其提供的 API(如push(), pop(), pushNamed()等)来管理页面路由。然而,Navigator 1.0存在一些局限性,如难以实现复杂的页面操作(如移…...
初次使用uniapp编译到微信小程序编辑器页面空白,真机预览有内容
uniapp微信小程序页面结构 首页页面代码 微信小程序模拟器 模拟器页面为空白时查了下,有几个说是“Hbuilder编译的时候应该编译出来一个app.js文件 但是却编译出了App.js”,但是我的小程序结构没问题,并且真机预览没有问题 真机调试 根据defi…...
【HF设计模式】03-装饰者模式
声明:仅为个人学习总结,还请批判性查看,如有不同观点,欢迎交流。 摘要 《Head First设计模式》第3章笔记:结合示例应用和代码,介绍装饰者模式,包括遇到的问题、遵循的 OO 原则、达到的效果。 …...
【人工智能-中级】模型部署与优化:从本地实验到云端与边缘部署
模型部署与优化:从本地实验到云端与边缘部署 在机器学习和深度学习模型训练完成后,如何高效、稳定地将模型部署到生产环境中,是实际应用中的关键环节。模型部署不仅涉及技术实现,还需要考虑性能优化、资源管理和安全性等多方面因素。本文将全面探讨模型部署与优化的相关内…...
Jenkins 编写Pipeline 简介及使用初识详解
一、Jenkins Pipeline简介 Jenkins Pipeline是Jenkins的一个重要功能,Jenkins 2.0 以上才会有,一系列 Jenkins 插件将整个持续集成用解释性代码 Jenkinsfile 来描述,它允许开发者以代码的方式定义整个持续集成和交付(CI/CD)流程,包括构建、测试、部署和监控等步骤。Jenk…...
uboot移植网络驱动过程,无法ping通mx6ull和ubuntu问题解决方案
开发板:mx6ull-ALPHA_V2.4 ubuntu版本:20.04 1.现在虚拟机设置中添加网路适配器用于开启桥接模式 2.在编辑中打开“虚拟网络编辑器” 我的电脑本身只有VMnet1和VMnet8,需要底下“添加网络”,增加这个VMnet0 ,并且进行…...
精准预测美国失业率和贫困率,谷歌人口动态基础模型PDFM已开源,可增强现有地理空间模型
疾病、经济危机、失业、灾害……人类世界长期以来被各种各样的问题「侵扰」,了解人口动态对于解决这类复杂的社会问题至关重要。 政府相关人员可以通过人口动态数据来模拟疾病的传播,预测房价和失业率,甚至预测经济危机。然而,在过…...
C#速成(文件读、写操作)
导包 using System.IO;1、写入文件(重要) StreamWriter sw new StreamWriter("C:\Users\29674\Desktop\volumn.txt");//创建一个TXT的文件 sw.WriteLine(textBox2.Text);//写入文件的内容 sw.Close();//关闭2、读取文件(不重要&…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
