Vue-$el属性
原博客地址:深入 Vue.js 的心脏:全面剖析 $el 属性_vue $el-CSDN博客
目录
1 $el是什么
1.1 $el本质
1.2 访问$el时机
1.3 $el与模板的关系
2 $el使用场景
2.1 集成第三方库
2.2 操作DOM元素样式
2.3 处理焦点和事件
2.4 实现自定义指令
3 $el的注意事项
3.1 不要过度依赖$el
3.2 注意生命周期
3.3 避免直接操作子组件的$el
4 与其他API协作
4.1 与$refs配合
4.2 与$nextTick配合
5 总结
1 $el是什么
$el:代表Vue实例所管理的根DOM元素。
每个Vue实例创建时,都会绑定一部分DOM元素,$el属性是这部分DOM元素的入口。
1.1 $el本质
$el属性的值是一个DOM元素对象。
- 获取元素属性:this.$el.id
- 修改元素样式:this.$el.style.color='red'
- 添加事件监听:this.$el.addEventListener('click', this.handleClick)
1.2 访问$el时机
$el属性在Vue实例完成挂载,将模板编译成真实DOM元素并插入到页面中后,才能访问$el。
Vue实例创建完成时也不能访问$el属性。
const vm = new Vue({template: '<div>Hello World</div>'
});// 错误示范:此时 vm.$el 还未定义
console.log(vm.$el); // undefined// 正确姿势:在 mounted 生命周期钩子中访问
vm.$mount('#app');vm.$nextTick(() => {console.log(vm.$el); // <div>Hello World</div>
});
这里可以看出,vm就是Vue实例。
1.3 $el与模板的关系
Vue实例的模板最终会被编译成一个DOM树,$el指向这棵树的根节点。
如果模板里没有定义根节点,Vue会自动创建一个<div>元素作为根节点。
<!-- 模板 -->
<template><p>这是一段文本</p><button>点击</button>
</template><!-- 渲染后的 DOM 结构 -->
<div><p>这是一段文本</p><button>点击</button>
</div>
2 $el使用场景
2.1 集成第三方库
第三方JS库都需要操作DOM元素,使用$el可以将Vue组件与这些库结合起来。
例如在Vue组件里使用Chart.js绘制图表,将图表渲染到组件的$el上。
import Chart from 'chart.js';export default {mounted() {this.chart = new Chart(this.$el, {// 图表配置});}
};
2.2 操作DOM元素样式
动态调整元素样式。
export default {mounted() {// 获取元素宽度const width = this.$el.offsetWidth;// 设置元素高度this.$el.style.height = `${width}px`;}
};
2.3 处理焦点和事件
手动控制DOM元素的焦点,如表单验证、自定义输入框等。
export default {mounted() {// 聚焦到输入框this.$el.querySelector('input').focus();},methods: {handleClickOutside(event) {// 判断点击事件是否发生在组件外部if (!this.$el.contains(event.target)) {// 执行相应操作}}}
};
2.4 实现自定义指令
Vue.js自定义指令可以用于扩展HTML元素功能,其中用到了$el属性。
Vue.directive('focus', {inserted: function (el) {el.focus();}
});
3 $el的注意事项
3.1 不要过度依赖$el
过度依赖$el会破坏Vue.js数据驱动的优势。
多数情况下,尽量使用Vue.js提供的数据绑定、计算属性、事件处理等机制操作DOM元素,将$el作为最后手段。
3.2 注意生命周期
$el只有在Vue实例完成挂载后才能访问,因此要在mounted及之后的生命周期函数里使用$el.
3.3 避免直接操作子组件的$el
Vue.js中,每个组件都有自己的$el属性,代表组件的根DOM元素。
尽量避免直接操作子组件的$el,而是通过props、事件等机制与子组件进行通信。
4 与其他API协作
$el可与Vue.js其他API协作。
4.1 与$refs配合
$refs属性可以获取到组件中使用ref属性标记的DOM元素或子组件实例,而$el可以获取到组件的根DOM元素。两者可以结合使用。
<template><div ref="container"><p>这是一段文本</p></div>
</template><script>
export default {mounted() {// 获取容器元素的高度const height = this.$refs.container.offsetHeight;// 设置容器元素的背景颜色this.$el.style.backgroundColor = 'lightblue';}
};
</script>
4.2 与$nextTick配合
某些情况需要在DOM更新后执行一些操作,例如获取元素尺寸、位置等。
$nextTick方法可以将回调函数延迟到下次DOM更新循环后执行,确保操作的是最新DOM元素。
export default {mounted() {this.$nextTick(() => {// 获取元素高度const height = this.$el.offsetHeight;// 执行其他操作});}
};
补充:API-Vue.nextTick的解释API — Vue.js

5 总结
$el提供了一种在Vue中直接操作DOM元素的途径。
但实际开发中,要谨慎使用$el属性,避免过度依赖$el破坏Vue.js数据驱动的优势。
充分利用$el属性的强大功能,结合Vue.js其他API,构建更加灵活高效的Vue.js应用程序。
相关文章:
Vue-$el属性
原博客地址:深入 Vue.js 的心脏:全面剖析 $el 属性_vue $el-CSDN博客 目录 1 $el是什么 1.1 $el本质 1.2 访问$el时机 1.3 $el与模板的关系 2 $el使用场景 2.1 集成第三方库 2.2 操作DOM元素样式 2.3 处理焦点和事件 2.4 实现自定义指令 3 $e…...
LLC Power Switches and Resonant Tank 笔记
1.概述 上面是一个典型的LLC电路。注意Lm是励磁电感,就是次级线圈空载时的主变压器电感,据说在计算谐振频率时无需关心。然后,作为DCDC电源,它通过调整谐振频率,来改变输出的电流。负载越大,频率越低&#…...
Python 如何在 Web 环境中使用 Matplotlib 进行数据可视化
Python Matplotlib 在 Web 环境中的可视化 数据可视化是数据科学和分析中一个至关重要的部分,它能帮助我们更好地理解和解释数据。在现代应用中,越来越多的开发者希望能够将数据可视化结果展示在网页上。Matplotlib 是 Python 中最常用的数据可视化库之…...
C#-数组:一维数组、二维数组、交错数组
数组:声明初始化过后,就不能在原有的基础上进行 添加 或者 删除 了 一:一维数组 一般将一维数组简称为数组 1.1 数组的声明 int[] arr1; 没有分配房间。初始化后就分配房间了int[] arr2 new int[5]; 存在默认值,为0int[] arr3…...
动态规划应该如何学习?
动态规划如何学习 参考灵神的视频和题解做的笔记(灵神YYDS,以后也都会用这套逻辑去思考) 枚举选哪个: 动态规划入门:从记忆化搜索到递推_哔哩哔哩_bilibili 746. 使用最小花费爬楼梯 - 力扣(LeetCode&a…...
【力扣 + 牛客 | SQL题 | 每日4题】牛客SQL热题210,213,212,219
1. 力扣SQL1076:项目员工2 1.1 题目: 表:Project ---------------------- | Column Name | Type | ---------------------- | project_id | int | | employee_id | int | ---------------------- (project_id, employee_id) 是…...
Qt 应用开发之 MVC 架构
在Qt应用开发中,MVC(Model-View-Controller)架构确实是一种常用的设计模式,它通过将应用程序的业务逻辑、数据展示和用户交互分离开来,显著提高了代码的可维护性和可扩展性。以下是MVC架构在Qt应用开发中的原理阐述&am…...
python之字符串总结
字符串(str) 对于字符串的学习,我整理了网上的一些资料,希望可以帮助到各位!!! 概述 由多个字母,数字,特殊字符组成的有限序列 字符串的定义:可以使用一对…...
Flutter鸿蒙next 封装 Dio 网络请求详解:登录身份验证与免登录缓存
✅近期推荐:求职神器 https://bbs.csdn.net/topics/619384540 🔥欢迎大家订阅系列专栏:flutter_鸿蒙next 💬淼学派语录:只有不断的否认自己和肯定自己,才能走出弯曲不平的泥泞路,因为平坦的大路…...
sql server复制一张表(表结构或表数据)SQL语句整理
1. 复制表结构及数据到新表 CREATE TABLE 新表 SELECT * FROM 旧表;这种方法会复制 旧表 中的所有内容到 新表,但新表不会保留原表的主键、自动递增等属性。为了保持这些属性,需要使用 ALTER 语句进行后续处理 2. 只复制表结构到新表 使用条件始终为假…...
c语言-进位计数制
文章目录 一、进位计数制是什么?二、c语言1.二进制转十进制2.十进制转二进制 一、进位计数制是什么? 进位计数制简称进制,是人类用于计算数量的基本规则。 可使用数字符号的数目称为基数或底数,基数个数为n个,即可称n…...
记本地第一次运行seatunnel示例项目
前置 静态源码编译通过:https://blog.csdn.net/u011924665/article/details/143372464 参考 seatunnel官方的开发环境搭建文档:https://seatunnel.incubator.apache.org/zh-CN/docs/2.3.5/contribution/setup 安装scala 下载scala 去官网下载&…...
Threejs 实现 VR 看房完结
效果: threejs 3d Vr 看房 gitee 地址: threejs-3d-map: 1、threejs 实现3d 地图效果链接:https://blog.csdn.net/qq_57952018/article/details/1430539902、threejs 实现 vr 看房 主要代码: src/views/PanoramicView/index.vu…...
找出目标值在数组中的开始和结束位置(二分查找)
给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示例 1:…...
VSCode进阶之路
VSCode进阶之路:从入门到高效率开发 🚀 Hey,朋友们好!还在为VSCode的海量功能感到眼花缭乱吗?咱们一起来解锁VSCode的超神技能吧! 开篇碎碎念 🎯 第一次用VSCode时,就像个闯入魔法世…...
leetcode-21-合并两个有序链表
题解: 1、初始化哑节点dum 2、 3、 代码: 参考:leetcode-88-合并两个有序数组...
SSM项目部署到服务器
将SSM(Spring Spring MVC MyBatis)项目部署到服务器上,通常需要以下步骤: 打包项目 生成一个WAR文件,通常位于target目录下 配置Tomcat: 将生成的WAR文件复制到Tomcat的webapps目录下。 配置conf/se…...
【Linux】网络编程:初识协议,序列化与反序列化——基于json串实现,网络通信计算器中简单协议的实现、手写序列化与反序列化
目录 一、什么是协议? 二、为什么需要有协议呢? 三、协议的应用 四、序列化与反序列化的引入 什么是序列化和反序列化? 为什么需要序列化和反序列化? 五、序列化推荐格式之一:JSON介绍 六、网络版计算器编程逻…...
Educational Codeforces Round 171 (Rated for Div. 2)(A~D) 题解
Problem - A - Codeforces--PerpendicularSegments 思路:正方形对角线最长,并且相互垂直.直接输出即可. int x,y,k; void solve(){ //Acin>>x>>y>>k;int resmin(x,y);cout<<"0 0"<<" "<<res<<" &q…...
【教程】Git 标准工作流
目录 前言建仓,拉仓,关联仓库修改代码更新本地仓库,并解决冲突提交代码,合入代码其他常用 Git 工作流删除本地仓库和远程仓库中的文件日志打印commit 相关 前言 Git 是日常开发中常用的版本控制工具,配合代码托管仓库…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
