Vue3魔法手册 作者 张天禹 07_标签

023_标签的ref属性

3.11 【标签的ref属性】
复制代码
作用: 用于注册模板引用。
	1,用在普通DOM标签上,获取的是DOM节点
	2, 用在组件标签上,获取的是组件实例对象。

笔记

在 vue2 项目中就,ref就是为节点打标识的
删除所有的结构和脚本,得到如下所示页面
通过JS代码去获取页面上的DOM元素
获取到DOM元素在打印
vue2的写法 App.vue
vue3的写法 App.vue
vue3 引入的Person会自动return,return结束,模板里面就可以使用了
APP组件先于Person组件渲染 所以结果出事了
App组件渲染结束了Person你才出来 这样的话 id就冲突了
Person里面写的北京怎么变成您好了?这可怎么办?不用id,使用ref解决
绿色代码表示: 给北京 h2这个DOM元素存储到 title2 这个容器里面
使用 ref 就就可以解决两个同名title2冲突问题 ref就是打标识,有点局部变量的感觉。
局部样式
scoped 范围只能是你上方模板里面的内容取作用
上面ref 加在 html 标签上,还没有将 ref 加在组件标签上
html 标签
绿色的是组件标签
定义a,b,c 响应式数据并初始化
person.value有三个数据
将 ref 放在html上拿到的是DOM,在将 ref 放到组件上,我们能拿到上面组件实例对象
父组件 App
子组件 Person
可以看 a,b,c
可以看 a,b
标签的ref属性 实现代码如下
复制代码
1, src/components/Person.vue
<template>
	<div class="person">
		<h1>中国</h1>
		<h2 ref="title2">北京</h2>
		<h3>尚硅谷</h3>
		<button @click="showLog">点我输出h2这个元素</button>
	</div>
</template>

<script setup lang="ts" name="Person">
	import { ref, defineExpose} from 'vue'

	// 创建一个title2的响应式引用,用来保存h2元素对象
	let title2 = ref()
	let a = ref(0)
	let b = ref(1)
	let c = ref(2)

	function showLog() {
		console.log(title2.value)
		// console.log(title2.$el)
		// console.log(title2._vnode.el)
	}

	defineExpose({
		a,
		b,
		c
	})

</script>

<style scoped>
	.person {
		background-color: skyblue;
		box-shadow: 0 0 10px;
		border-radius: 10px;
		padding: 20px;
	}

	button {
		margin: 0 5px;
	}

	li {
		font-size: 20px;
	}
</style>







2, src/App.vue
<template>
  <div class="app">
    <h2 ref="title2">您好</h2>
    <button @click="showLog">测试</button>
    <Person ref="ren" />
  </div>
</template>

<script setup lang="ts" name="App">
  import Person from './components/Person.vue';
  import { ref } from 'vue';

  let title2 = ref();
  let ren = ref();

  function showLog() {
    // console.log(title2.value);
    console.log(ren.value);
  }
</script>

<style scoped>
  .app {
    background-color: #ddd;
    box-shadow: 0 0 10px;
    border-radius: 10px;
    padding: 20px;
  }
</style>





3, src/main.ts
// 引入 createApp 用于创建应用
import {createApp} from 'vue'
// 引入 App根组件
import App from './App.vue'
// 调用createApp()方法创建应用并放在id为app的容器里面
createApp(App).mount('#app')



4, index.html
<!DOCTYPE html>
<html lang="">
  <head>
    <meta charset="UTF-8">
    <link rel="icon" href="/favicon.ico">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vite App</title>
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="/src/main.ts"></script>
  </body>
</html>
相关推荐
To_OC6 小时前
从一头雾水到跑通全流程:我用一个周末啃透了JWT登录鉴权
前端·后端·http
excel8 小时前
研究 Vue 3 源码的收获
前端·vue.js
可乐鸡翅yeah_10 小时前
业务中 M3U8 水印相关坑,硬水印和动态水印区别
前端·网络·数据库·ffmpeg·m3u8在线
lerhxx10 小时前
AI 应用如何高效优雅地恢复中断?—— "连接解耦 + 状态持久化"
前端·javascript
计算机魔术师10 小时前
METR 演示 AI 智能体如何篡改 Inspect 评估记录以掩盖不当行为
前端
前端snow11 小时前
ai agent --- 异步处理之 Rabbit MQ
前端
念何架构之路11 小时前
zap扩展生态与总结
java·前端·数据库
独孤九剑打醒他11 小时前
【原创开源】【概念设计】源 - 栅 - 漏 - 栅 - 源 横向双栅 MOS,低压交流多值逻辑芯片探索
前端·其他·架构·开源·硬件工程
mantou13211 小时前
我给 AI Agent 做了个「油猴」:让 Claude Code / Codex 直接用你已登录的浏览器
前端·javascript·后端
默_笙11 小时前
🍕 一个主编、三个工种、两本手册:搭一支 AI 调研队
前端·javascript