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应用程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/904838.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

小满OKKICRM与钉钉数据集成方案解析

小满-宜搭产品同步&#xff1a;小满OKKICRM数据集成到钉钉的技术实现 在企业信息化建设中&#xff0c;系统间的数据集成是提升业务效率和数据一致性的关键环节。本文将聚焦于“小满-宜搭产品同步”方案&#xff0c;详细探讨如何将小满OKKICRM的数据高效、可靠地集成到钉钉平台…

【prefect】Prefect二:python任务调度工具 Prefect 基础使用教程 | work pool | Deployment | flow

一、Work Pool 1、什么是 Work Pool 白话解释&#xff1a;集中管理部署脚本的开关 Work pools allow you to switch between different types of infrastructure and to create a template for deployments. Data platform teams find work pools especially useful for mana…

蓝海创意云入选中国夏衍电影学会工业与科技影视专业委员会成员单位

党的二十届三中全会指出&#xff0c;科技自立自强是中国式现代化的有力保障。科技兴则民族兴&#xff0c;科技强则国家强。为深入的贯彻落实这一重要部署&#xff0c;推动工业与科技领域的融合发展充分发挥电影艺术在传播科技创新精神、展现工业发展成就方面的独特作用&#xf…

基于SpringBoot的“CSGO赛事管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“CSGO赛事管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统首页界面图 赛事信息界面图 赛事通知界面…

WPF+MVVM案例实战(十三)- 封装一个自定义消息弹窗控件(上)

文章目录 1、案例效果2、功能实现1、创建文件2、资源文件获取3、枚举实现3、弹窗实现1、界面样式实现2、功能代码实现4、总结1、案例效果 2、功能实现 1、创建文件 打开 Wpf_Examples 项目,我们在用户控件类库中创建一个窗体文件 SMessageBox.xaml,同时创建枚举文件夹 Enum…

室内障碍物射线追踪算法matlab模拟仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 增加发射点 加入室内墙壁&#xff1a; 同时增加发射点和室内墙壁&#xff1a; 2.算法运行软件版本 matlab2022a 3.部分…

荒野大镖客:救赎 PC版整合包

游戏名称&#xff1a;荒野大镖客&#xff1a;救赎 英文名称&#xff1a;Red Dead Redemption 游戏类型&#xff1a;动作冒险类(ACT)游戏 游戏制作&#xff1a;Rockstar Games/Double Eleven 游戏发行&#xff1a;Rockstar Games 游戏平台&#xff1a;PC 发售时间&#xff1a;20…

ubuntu双屏只显示一个屏幕另一个黑屏

简洁的结论&#xff1a; 系统环境 ubuntu22.04 nvidia-535解决方案 删除/etc/X11/xorg.conf 文件 记录一下折腾大半天的问题。 ubuntu系统是22.04,之前使用的时候更新驱动导致桌面崩溃&#xff0c;重新安装桌面安装不上&#xff0c;请IT帮忙&#xff0c;IT一番操作过后也表示…

Linux 练习三

1、建立用户组 shengcan&#xff0c;其id 为 2000 [rootlocalhost 桌面]# groupadd -g 2000 shengchan 2、建立用户组 caiwu&#xff0c;其id 为 2001 [rootlocalhost 桌面]# groupadd -g 2001 caiwu 3、建立用户组 jishu&#xff0c;其 id 为 2002 [rootlocalhost 桌面]#…

深度学习数学基础之梯度

深度学习数学基础之梯度 方向余弦 方向导数 梯度&#xff08;向量&#xff09; 变化率最大的方向或者说方向导数最大的方向就是梯度向量的方向指向方向导数变化最大的方向

Unity XR Interaction Toolkit 开发教程(1):OpenXR 与 XRI 概述【3.0 以上版本】

文章目录 &#x1f4d5;Unity XR 开发架构&#x1f50d;底层插件&#xff08;对接硬件&#xff09;&#x1f50d;高层 SDK&#xff08;面向应用交互层&#xff09; &#x1f4d5;OpenXR&#x1f4d5;XR Interaction Toolkit&#x1f50d;特点&#x1f50d;XRI 能够实现的交互类…

2024-10-29 商业分析-盗取他人游戏MOD牟利-记录

摘要&#xff1a; 2024-10-29 商业分析-盗取他人游戏MOD牟利-记录 事件&#xff1a; 【实锤】《真英雄》盗用本人《风林火山》mod地图售卖牟利&#xff01;_ryan_knight_12吧_百度贴吧 真英雄&#xff1f;&#xff1f;我从未见过如此厚颜无耻之人【ryan_knight_12吧】_百度贴吧…

神奇的数据恢复工具:让丢失的数据重现

现在很多时候我们的数据资料都是通过电子方式存储吧&#xff0c;毕竟现在都在推崇无纸化办公啦。但是有时候我们觉得好好存储在电子设备里的文件莫名的就不翼而飞了。今天我介绍几个免费的数据恢复软件帮你把它们抓回来&#xff01; 1.Foxit数据恢复大师 链接直达&#xff1a…

MFC界面开发组件Xtreme Toolkit Pro v24全新发布—完整的SVG支持

Codejock软件公司的Xtreme Toolkit Pro是屡获殊荣的VC界面库&#xff0c;是MFC开发中最全面界面控件套包&#xff0c;它提供了Windows开发所需要的11种主流的Visual C MFC控件&#xff0c;包括Command Bars、Controls、Chart Pro、Calendar、Docking Pane、Property Grid、Repo…

定高与不定高虚拟列表

前言 在日常代码开发过程中&#xff0c;总会遇到大数据量的问题&#xff0c;当我们需要加载显示几千上万的数据的时候&#xff0c;如果我们是一次性渲染&#xff0c;那肯定就会出现严重的卡顿现象&#xff0c;这对用户体验是非常差的&#xff0c;也会让我们的项目&#xff0c;可…

基于全景图像拼接算法

图像拼接简介图像拼接的主要步骤摄像机运动的投影模型&#xff08; projective model)图像的对齐 (registration)图像的合成 (blending)图像拼接试验 什么是图像拼接&#xff1f; 将多幅在不同时刻、从不同视角或者由不同传感器获得的图像经过对齐然后无缝地融合在一起&#xf…

二十二、MySQL 8.0 主从复制原理分析与实战

文章目录 一、复制&#xff08;Replication&#xff09;1、什么是复制2、复制的方式3、复制的数据同步类型3.1、异步复制3.2、半同步复制3.3、设计理念&#xff1a;复制状态机——几乎所有的分布式存储都是这么复制数据的 4、基于binlog位点同步的主从复制原理4.1、异步复制示例…

MFC工控项目实例二十七添加产品参数

承接专栏《MFC工控项目实例二十六创建数据库》 在型号参数界面添加三个参数试验时间、最小值、最大值。变量为double m_edit_time; double m_edit_min; double m_edit_max; 1、在SEAL_PRESSURE.h中添加代码 class CProductPara { public:union{struct{...double m_edit_min;…

java:入门基础(1)

练习一&#xff1a;文字版格斗游戏 需求: ​ 格斗游戏&#xff0c;每个游戏角色的姓名&#xff0c;血量&#xff0c;都不相同&#xff0c;在选定人物的时候&#xff08;new对象的时候&#xff09;&#xff0c;这些信息就应该被确定下来。 举例&#xff1a; ​ 程序运行之后…

Spring Boot Configuration和AutoConfiguration加载逻辑和加载顺序调整

在spring中&#xff0c; AutoConfiguration也是一个种Configuration&#xff0c;只是AutoConfiguration是不能使用proxy的。 而且spring对于两者的加载顺序也不是一视同仁&#xff0c;是有顺序的。spring会先加载SpringBootApplication可达的且标注了Configuration的类&#x…