Vue.js实例学习:获取DOM元素

article/2025/9/13 20:46:11

一、获取DOM元素

在Vue中获取DOM元素,我们可以用ref

用法(和React一样):
(1)在组件的DOM部分,任意标签中 写上:ref="xxx"
(2)通过组件对象 this.$refs.xxx 获取到元素

1、获取HTML标签的DOM

例1:
<div id="app"></div><script type="text/javascript">let App = {template: `<div><button ref="btn">我是按钮</button>    </div>`,beforeCreate() {//这里不能操作数据console.log('beforeCreate: ', this.$refs.btn);},created() {//这里可以操作数据了console.log('created: ', this.$refs.btn);},beforeMount() {//new Vue 发生装载, 替换 <div id="app">之前console.log('beforeMount: ', this.$refs.btn);},mounted() {//装在数据之后console.log('mounted: ', this.$refs.btn);}, };new Vue({el: '#app',components: {app: App},template: `<app />`,});
</script>

控制台输出:
在这里插入图片描述
说明:mounted()时才能获取this.$refs.btn


2、获取组件的DOM

例2:
<div id="app"></div><script type="text/javascript">let Temp = {template: `<div>我是子组件</div>`,};let App = {components: {temp: Temp,},template: `<temp ref="tmp"/>`,mounted() {console.log(this.$refs.tmp);},};let vm = new Vue({el: '#app',components: {app: App},template: `<app />`,});
</script>

控制台输出:
在这里插入图片描述
我们看到控制台输出 temp组件
这里我们要关注的是 组件的 各个属性(eg: $ el、$ parent 等)···

假如我们把console.log(this.$refs.tmp)改为:

console.log(this.$refs.tmp.$el);

控制台会输出下图,由此可知 $el 代表着什么~
在这里插入图片描述

总结:
  • $parent: 获取当前组件的父组件
  • $children:················ 的子组件
  • $root:获取new Vue的实例 (即上面的:vm)
  • $el: 获取当前组件的DOM元素

二、给DOM元素添加事件的特殊情况


例:

要求:在显示input元素的瞬间,获取input的焦点

<div id="app"></div><script type="text/javascript">let App = {template: `<div><input type="text" v-if="isShow" ref="myInput" /></div>`,data() {return {isShow: false,};},mounted() {this.isShow = true;    //显示input元素this.$refs.myInput.focus();  //获取input的焦点},   };let vm = new Vue({el: '#app',components: {app: App},template: `<app />`,});
</script>

运行后报错:
在这里插入图片描述
报错显示focus不存在,原因是 this.$refs.myInput 也是undefined,为什么ref没获取到DOM元素呢?

我们先思考,如果我们把mounted函数内改成:

mounted() {this.isShow = true;  this.isShow = false;  this.isShow = true;  
},

运行过程中,input元素会 先显示,再消失,然后再显示吗?
答案是否定的。因为Vue会先让代码执行完,然后才会根据最终的值,进行DOM操作。 其实上面的代码等同于下面的代码:

mounted() {this.isShow = true;  
},

那么怎么解决呢?

这里我们用 $nextTick解决~


vm.$nextTick

什么时候用:在Vue渲染DOM到页面后 立即做某件事,用$nextTick

this.$nextTick(function() {·····dosomething
})

修改版:
let App = {template: `<div><input type="text" v-if="isShow" ref="myInput" /></div>`,data() {return {isShow: false,};},mounted() {//显示input元素的瞬间,获取焦点this.isShow = true;this.$nextTick(function() {this.$refs.myInput.focus();  });},};let vm = new Vue({el: '#app',components: {app: App},template: `<app />`,
});

http://chatgpt.dhexx.cn/article/DCyS5gD1.shtml

相关文章

ref 引用(vue获取DOM元素)

ref 引用 jquery 牛逼 简化了程序员操作DOM的过程 vue 优势&#xff1a; MVVM 在 vue 中&#xff0c;程序员不需要操作DOM。只需要把数据维护好&#xff01;(数据驱动视图) 结论&#xff1a;在 vue 项目&#xff0c;强烈不建议大家安装和使用jQuery&#xff01;&#xff01;&am…

sql中批量插入数据用法

单次插入数据方法 INSERT INTO 表名&#xff08;字段1&#xff0c;字段2&#xff0c;字段3&#xff09;VALUES(第一个值&#xff0c;第二个值&#xff0c;第三个值&#xff09; 多次插入方法 第一种 INSERT INTO 表名&#xff08;字段1&#xff0c;字段2&#xff0c;字段3…

sql-批量插入数据脚本

批量插入数据脚本 1、第一种批量插入数据脚本. 可以基本满足要求。理解上较为简单&#xff0c;所以这个最常用。 DECLAREmaxnumber CONSTANT INT : 5000;--插入5000条数据i INT : 1;--i的取值从1开始 BEGINFOR i IN 1 .. maxnumber loopinsert into ODS.TABLE1--表名(ID, P_ID…

oracle11g批量insert多条,Oracle高效批量插入数据

一、准备工作 建表 CREATE TABLE TEMP_20200210 ( DMC VARCHAR2(100); ) 用程序拼接如下的批量插入的SQL INSERT INTO TEMP_20200210 (DMC) SELECT CD.* FROM ( SELECT 1234567 FROM DUAL UNION SELECT 1234568 FROM DUAL UNION SELECT 1234568 FROM DUAL ) CD 在C盘文件夹下放…

springboot 注解方式批量插入数据

文章目录 一.使用场景二.实现方法1.mysql表结构2.domain3.mapper4.测试类5.测试结果 三.插入效率对比1.批量插入2.一条一条插入 一.使用场景 一次请求需要往数据库插入多条数据时&#xff0c;可以节省大量时间&#xff0c;mysql操作在连接和断开时的开销超过本次操作总开销的4…

Jmeter向数据库批量插入数据

Jmeter向数据库批量插入数据 下面介绍一下Jmeter向mysql数据库中插入数据的入门操作 1、新建一个线程组&#xff0c;这是必经步骤&#xff1a; 在测试计划上右键–>添加–>Theaders(Users)–>线程组 2、添加配置元件JDBC Connection Configuration 在线程组上右键…

【Hbase批量插入数据】

一.批量插入数据&#xff08;hbase用户执行&#xff0c;不可以调整key&#xff09; -- create ns_zj001:bigTab,f01 -- put ns_zj001:bigTab,001,f01:name,zhangsan java -cp ./hbase-tools-1.0.jar:hbase classpath com.suning.tools.Tools -zk hbase01-dev.cnsuning.com,h…

大数据写入到Oracle数据库(批量插入数据)

开发中经常遇到批量插入数据的需求&#xff0c;为了提高开发效率大多会使用ORM架构&#xff0c;个别之处 才会手写SQL&#xff0c;我们使用C#.NET Core5.0开发&#xff0c;所以优先选择了微软的EF。 但是EF原生没有批量操作功能&#xff0c;需要自己扩展或使用第三方的扩展&am…

Mybatis如何批量插入数据?

有一小段时间没有写技术博文了&#xff0c;今天我又来更新啦&#x1f60a;&#x1f60a;&#x1f60a;5月份中间有个小插曲&#xff0c;那就是我在单位打球意外导致脚跟腱受伤&#xff0c;然后住院在家修养了一个多月了&#xff0c;所以小伙伴们在外锻炼时还是时刻注意自身的安…

MYSQL-批量插入数据

批量插入数据 存储过程也有返回值&#xff0c;存储过程有一个或多个返回值&#xff0c;函数有且只有一个返回值 往表里插入1000w数据 1.建表 create database bigData; use bigData;create table dept( id int unsigned primary key auto_increment, deptno mediumint unsi…

Mybatis批量插入数据

前言 在很多业务场景中&#xff0c;我们需要批量录入数据。那么意味着我们需要以最高效的方式去实现功能&#xff0c;同时也需要保证软件的便捷性与可维护性&#xff0c;开源字节使用MyBatis foreach标签方式优雅的实现了材料的出入库。源码开放&#xff0c;可前往码云仓库免费…

批量插入

目录 一、批量插入数据 ⚪JDBC的批量处理语句的方法 二、高效的批量插入 1.举例&#xff1a;向goods表中插入20000条数据 ⭐goods表的创建 方式一&#xff1a;使用Statement 方式二&#xff1a; 使用PreparedStatement替换Statement &#x1f319;方式一与方式二的对比…

三种批量插入数据的方法

批量插入数据 本文将介绍三种批量插入数据的方法。第一种方法是使用循环语句逐个将数据项插入到数据库中&#xff1b;第二种方法使用的是SqlBulkCopy&#xff0c;使您可以用其他源的数据有效批量加载 SQL Server 表&#xff1b;第三种使用的方法是sql server中的表值参数方法&a…

Vue 通过a标签下载文件

vue前端点击某个a便签需要下载对应文件&#xff0c;href为下载路径&#xff0c;download为下载文件名 这是Vue-cli3 写法 因为public文件夹是静态拷贝。 并不要把文件放到src>assets里面 因为assets中的文件会经过 webpack 打包&#xff0c;重新编译。 <a href"./p…

通过 a 标签下载文件

后台管理项目涉及到文件下载到本地&#xff0c;类型包括&#xff08;图片&#xff0c;音频&#xff0c;视频&#xff0c;office文件等等&#xff09;&#xff0c;只需将后台接口提供的url给到 a 标签即可。 <div class"preview-download" click.stop"downLoa…

a标签下载文档 a下载文档失败问题 跨域调用

可以通过a标签下载文档 a中有一个download属性 这个属性可以为空&#xff0c;如果写入的话这是写下载文档的名字 a标签默认下载是在同一个域内&#xff0c;如果跨域的话下载会失败&#xff0c;可能变成预览 出现的问题 from origin ‘http://localhost:8080’ has been blocke…

js使用a标签实现文件下载功能

工作中遇到下载txt文本文件的下载需求&#xff0c;稍作整理&#xff0c;下载示例如下&#xff1a; <button onclick"log()">文件下载</button>// 日志函数 function log() {// dom中创建a标签let aTag document.createElement(a)// 日志展示的内容let c…

JS-a标签下载文件

目录 问题描述解决方法拓展 另一种文件流下载 问题描述 昨天拿到一个需求,就是做成这种下载的模样 后台返回的下载链接长成这样 解决方法 就是一个最普通的方法,创建a标签 ,加上download属性,模拟标签点击 就可以触发下载了 注意:这个是因为直接拿到了请求链接,get请求 co…

HTML中的一些细节处理

# 说明 参考资料:简书的 伴歌知行的JS下载图片和文件&#xff0c;防止浏览器直接打开 、夜半修仙,;CSDN的weixin_3791475的使用a标签下载文件不跳转;努力学习的汪&#xff1a;洪学习笔记 文章目录 # 说明前端利用a标签实现文件[图片]下载文件下载常用方式总结分析Ⅰ-后端设置下…

JAVA中数组和集合的区别

转换 数组转换为集合&#xff1a; Arrays.asList(数组) 示例&#xff1a; 1 2 3 4 5 int[] arr {1,3,4,6,6};//定义一个长度为5数组 Arrays.asList(arr); for(int i0;i<arr.length;i){ System.out.println(arr[i]); } 集合转换为数组&#xff1a; 集合.toArray()…