当前位置: 首页 > 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 节点元素,如果用在组件标签上获取的是组件实例对象。
http://www.lryc.cn/news/411980.html

相关文章:

  • llama-factory 系列教程 (六),linux shell 脚本自动实现批量大模型的训练、部署与评估
  • python安全脚本编写之流量泛洪
  • 一文看懂Java反射、注解、UML图和Lambda表达式
  • 【漏洞复现】搜狗输入法简单绕过Windows锁屏机制
  • JAVA Spring学习Day1
  • linux常见面试题(三)
  • 【JS】ES6新类型Map与Set
  • FETCH FIRST ROW ONLY和 DISTINCT ON和 LIMIT 1的用法
  • 前端小白安装node、vue、Express、Electron及(Electron桌面端exe应用开发)
  • solidity多态【很重要】
  • Jangow-1.0.1靶机漏洞复现(未完成)
  • 软件测试--python基础
  • GPIO子系统
  • 学会这个Python库,接口测试so easy
  • Stable Diffusion4.8.7(Ai绘画)软件安装教程
  • 操作系统错误处理
  • 【靶场实操】sql-labs通关详解----第一节:基础注入方式(Less-1~Less-10)
  • 力扣676.实现一个魔法字典
  • ctfshow-web入门-sql注入(web171-web175)
  • 视频怎么添加音乐?分享5种视频添加音乐方法
  • 黑马JavaWeb后端案例开发(包含所有知识点!!!)
  • FPGA开发——蜂鸣器实现音乐播放器的设计
  • InnoDB存储引擎(1)
  • VMWare虚拟机共享主机的网络访问外网
  • LeetCode Easy|【415. 字符串相加】
  • RAG 革命:NVIDIA 工作站如何成为企业 AI 的秘密武器
  • 九大原则,轻松构建个人高效SOP
  • Airtest的demo实现多设备并行
  • 社区养老服务小程序的设计
  • Interceptor拦截器开发