当前位置: 首页 > news >正文

【Vue3】标签的 ref 属性

【Vue3】标签的 ref 属性

  • 背景
  • 简介
  • 开发环境
  • 开发步骤及源码

背景

随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日子。本文内容并非完全原创,大多是参考其他文章资料整理所得,感谢每位技术人的开源精神。

简介

本文介绍 Vue3 中如何使用标签的 ref 属性。

传统开发中通常使用 document.getElementById() 获取标签对应的 DOM 元素,如果页面中多个 DOM 元素使用相同的 ID 进行标识,则使用 document.getElementById() 可能获取非目标 DOM 元素。Vue 提供了标签的 ref 属性解决此问题。

开发环境

分类名称版本
操作系统WindowsWindows 11
IDEVisual Studio Code1.91.1

开发步骤及源码

1> 创建 Vue3 工程,参考:【Vue3】工程创建及目录说明。

2> 删除 src 目录下 assetscomponents 目录。

3> 修改 src 目录下 main.ts

import { createApp } from 'vue'
import App from './App.vue'createApp(App).mount('#app')

4> 自定义功能组件。

<template><div class="demo" ><h1 ref="title">Demo组件</h1><button @click="showTitle">Show Title</button></div>
</template><script setup lang="ts">
import { ref } from 'vue'// 创建一个title用于存储ref标记的内容
const title = ref()function showTitle() {console.log(title.value)
}
</script><style scoped lang="scss">
.demo {background-color: green;margin: 10px 0;padding: 20px;
}
</style>

注意:需要执行 npm install -D sass 命令安装 CSS 预处理器。

5> 修改 Vue 根组件 src/App.vue,引用自定义功能组件。

<template><div class="root"><h1 ref="title">App组件</h1><button @click="showTitle">Show Title</button><Demo ref="demo" /><button @click="showDemo">Show Demo</button></div>
</template><script setup lang="ts">
import Demo from './components/Demo.vue'
import { ref } from 'vue'// 存储ref标记的内容
const title = ref('title')
const demo = ref('demo')function showTitle() {console.log(title.value)
}function showDemo() {console.log(demo)
}
</script><style scoped lang="scss">
.root {background-color: orange;padding: 20px;
}
</style>

由以上代码可以看出,标签的 ref 属性既可以用在普通的 HTML 标签上,也可以用在组件标签上。

6> 执行命令 npm run dev 启动应用,浏览器访问:http://localhost:5173/

  • 点击 App 组件的 Show Title 按钮,显示日志如下:
    在这里插入图片描述

  • 点击自定义组件的 Show Title 按钮,显示日志如下:
    在这里插入图片描述

  • 点击 Show Demo 按钮,显示日志如下:
    在这里插入图片描述

从日志中可以看出:

  • 虽然 App 组件和自定义功能组件都在同一类型标签 <h1> 上使用了相同名称的 ref 属性,但实际获取到的是各自定义的 DOM 节点元素,不会出现冲突;
  • 如果 ref 属性用在普通的 HTML 标签上获取的是对应的 DOM 节点元素,如果用在组件标签上获取的是组件实例对象。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • linux每个目录都是干啥的???linux目录说明
  • 11. 计算机网络TCP三次握手
  • 【Python】趣味游戏编程练习记录
  • 7.31日学习打卡---Spring Cloud Alibaba(一)
  • 明明谷歌账号输入正确,登录的时候谷歌却提示:找不到您的Google账号?原因和建议
  • Java--异常
  • 视频剪辑的重磅AI神器:FunClip
  • C语言:扫雷游戏实现
  • 探索Django
  • C语言中数组的各种排序
  • 数据结构与算法 - 链表
  • 项目实战_表白墙(简易版)
  • mysql忘记root密码 解决办法
  • 如何通过前端表格控件实现自动化报表?
  • 教育教学质量评测系统开发之软件技术分析
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【技术性】Search知识
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 4个实用的微服务测试策略
  • android图片蒙层
  • flutter的key在widget list的作用以及必要性
  • in typeof instanceof ===这些运算符有什么作用
  • Leetcode 27 Remove Element
  • mongo索引构建
  • Object.assign方法不能实现深复制
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 类orAPI - 收藏集 - 掘金
  • 全栈开发——Linux
  • 实现简单的正则表达式引擎
  • 树莓派 - 使用须知
  • 一个JAVA程序员成长之路分享
  • 优秀架构师必须掌握的架构思维
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 06-01 点餐小程序前台界面搭建
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • HanLP分词命名实体提取详解
  • Java数据解析之JSON
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • # Kafka_深入探秘者(2):kafka 生产者
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #100天计划# 2013年9月29日
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • $L^p$ 调和函数恒为零
  • (9)STL算法之逆转旋转
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (Note)C++中的继承方式
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (SERIES12)DM性能优化
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (数据结构)顺序表的定义
  • (转) 深度模型优化性能 调参
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET Core 中插件式开发实现