vue3-模版引用

模版引用

ref 属性

场景:需要直接访问底层 DOM 元素。

方法:使用特殊的 ref 属性。

<input ref="input">

ref 属性 允许我们在一个特定的 DOM 元素或子组件实例被挂载后,获得对它的直接引用。

访问模板引用

小 Demo: 当 input 组件挂载后 自动获取焦点

<script lang="ts" setup>
import { ref, onMounted } from 'vue'// 声明一个 ref 来存放该元素的引用
// 必须和模板里的 ref 同名
const input = ref(null)onMounted(() => {input.value.focus()
})watchEffect(() => {if (input.value) {input.value.focus()} else {// 此时还未挂载,或此元素已经被卸载(例如通过 v-if 控制)}
})
</script><template><div class="container"><input ref="input" /></div>
</template><style lang="scss" scoped>
.container {
}
</style>

注意:只有组件挂载后才能访问模版引用。初次渲染时元素不存在所以在模版表达式上访问变量则为 null。

如果你需要侦听一个模板引用 ref 的变化,确保考虑到其值为 null 的情况

v-for 中的模板引用

<script lang="ts" setup>
import { ref, onMounted } from 'vue'const list = ref([/* ... */1, 2, 3
])const itemRefs = ref([])onMounted(() => console.log(itemRefs.value))
</script><template><div class="container"><ul><li v-for="item in list" ref="itemRefs">{{ item }}</li></ul></div>
</template><style lang="scss" scoped>
.container {
}
</style>

效果:

应该注意的是,ref 数组并不保证与源数组相同的顺序。

函数模板引用

  1. 除了使用字符串作为名字,还可以使用一个函数,函数会在每次组件更新时都被调用。

  2. 该函数会收到元素引用作为其第一个参数

<script lang="ts" setup>
import { ref, onMounted } from 'vue'const input = ref([])const sum = (el) => {console.log(el)
}
</script><template><div class="container"><button:ref="(el) => {console.log(el)}">绑定内联函数</button><br /><button :ref="sum">绑定组件函数</button></div>
</template><style lang="scss" scoped>
.container {
}
</style>

效果:

  • 语法是 :ref 绑定函数。

  • 可以绑定内联函数。

  • 可以绑定组件函数。

  • 当元素被销毁时,函数也会被调用一次,此时引用参数为 null。

组件上的 ref

模板引用也可以被用在一个子组件上。这种情况下引用中获得的值是组件实例

<script lang="ts" setup>
import { onMounted, ref } from 'vue'
import ComA from '@/components/ComA.vue'const coma = ref<InstanceType<typeof ComA>>()onMounted(() => {console.log(coma.value)
})
</script><template><div class="container"><ComA ref="coma"></ComA></div>
</template><style lang="scss" scoped>
.container {
}
</style>

效果:

一个子组件使用的是选项式 API ,父组件对子组件的每一个属性和方法都有完全的访问权。

使用了 <script setup> 的组件是默认私有的,一个父组件无法访问到一个使用了 <script setup> 的子组件中的任何东西,除非子组件在其中通过 defineExpose 宏显式暴露

defineExpose 宏

<script lang="ts" setup>
import { ref } from 'vue'const a = ref(1)
const b = ref(2)// 像 defineExpose 这样的编译器宏不需要导入
defineExpose({a,b
})
</script><template><div class="container">我是子组件</div>
</template><style lang="scss" scoped>
.container {
}
</style>

未定义效果:

定义效果:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot:详解Bean生命周期和作用域

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java项目分享》 《RabbitMQ》《Spring》《SpringMVC》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 前言一、生命周期二…

继电器开关电路图大全

继电器是一种电控制器件&#xff0c;是当输入量&#xff08;激励量&#xff09;的变化达到规定要求时&#xff0c;在电气输出电路中使被控量发生预定的阶跃变化的一种电器。它具有控制系统&#xff08;又称输入回路&#xff09;和被控制系统&#xff08;又称输出回路&#xff0…

Python笔记10-数据可视化练习折线图

文章目录 JSON数据Python数据和Json数据的相互转化pyecharts模块构建折线图全局配置绘制疫情数据折线图 JSON数据 JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据 。本质上是一个带有特定格式的字符串 主要功能&#xff1a;可以在各个编程语言中流通…

零日漏洞:威胁与应对

一、引言 随着信息技术的迅猛发展&#xff0c;网络安全问题日益凸显。其中&#xff0c;零日漏洞已成为当今网络安全领域最受关注的问题之一。本文将深入探讨零日漏洞的威胁、产生原因以及应对策略&#xff0c;以期提高人们对这一问题的认识和防范意识。 二、零日漏洞的威胁 …

PostgreSQL 的对象层次

所有的数据库离开数据量来谈性能都是耍流氓。 就你那几万条的数据库&#xff0c;用啥都行&#xff0c;典型的就是怎么方便怎么来。 不过 PostgreSQL 上手确实比 MySQL 概念更多。 PostgreSQL 比 MySQL 多了一层。 PostgreSQL 是从PostgreSQL 是从 Database&#xff0c;到 S…

C++---string类

一.string类&#x1f357; C支持C风格的字符串&#xff0c;另外还提供了一种 字符串数据类型&#xff1a; string是定义在头文件string中的类&#xff0c;使用前需要包含头文件string。 #include<string> C语言中的字符串需要引用头文件#include<string.h> #includ…

SpringMVC传递数据给前台

SpringMVC有三种方式将数据提供给前台 第一种 使用Request域 第二种 使用Model&#xff08;数据默认是存放在Request域中&#xff09; 与第一种方式其实是一致的 第三种 使用Map集合&#xff08;数据默认是存放在Request域中&#xff09;

20234.1.20 使用idea进行Java的helloworld程序开发

20234.1.20 使用idea进行Java的helloworld程序开发 idea毕竟是jtbrain的产品&#xff0c;整体和pycharm相同&#xff0c;初步使用感受比eclipse更亲切 一、程序结构 project&#xff08;项目&#xff0c;工程&#xff09; module&#xff08;模块&#xff09; package&…

回调地狱与解决方案

什么是回调地狱&#xff1f; 简单理解就是回调函数嵌套回调 示例&#xff1a; setTimeout(() > {console.log(1);setTimeout(() > {console.log(2);setTimeout(() > {console.log(3);}, 1000);}, 2000)}, 3000)如上代码所示&#xff0c;回调函数嵌套回调&#xff0c;就…

Django从入门到精通(一)

目录 一、Django环境搭建与命令 1.1、安装 1.2、命令行 创建项目 编写代码 运行 app概念 1.3、Pycharm创建项目 1.4、虚拟环境 创建虚拟环境 - 命令行 介绍 操作 基本问题 Pycharm 项目虚拟环境 django虚拟环境【安装django最新版本】 django虚拟环境【安装指…

L1-060 心理阴影面积(Java)

这是一幅心理阴影面积图。我们都以为自己可以匀速前进&#xff08;图中蓝色直线&#xff09;&#xff0c;而拖延症晚期的我们往往执行的是最后时刻的疯狂赶工&#xff08;图中的红色折线&#xff09;。由红、蓝线围出的面积&#xff0c;就是我们在做作业时的心理阴影面积。 现…

认识并使用Shiro技术

认识并使用Shiro 一、对Shiro的基本认知1、Shiro是什么&#xff1f;2、Shiro的核心组件是&#xff1f;2.1 Subject2.2 UsernamePasswordToken2.3 Realm&#xff08;重点是&#xff1a;AuthorizingRealm用于授权、AuthenticatingRealm用于认证&#xff09;2.4 SecurityManager2.…

OpenCV-Python(49):图像去噪

目标 学习使用非局部平均值去噪算法去除图像中的噪音学习函数cv2.fastNlMeansDenoising()、cv2.fastNlMeansDenoisingColored等 原理 在前面的章节中我们已经学习了很多图像平滑技术&#xff0c;比如高斯平滑、中值平滑等。当噪声比较小时&#xff0c;这些技术的效果都是很好…

基数(桶)排序

目录 基数排序 实现步骤 完整代码 基数排序 核心思想&#xff1a;统计原数组中某个元素在该数组中出现的次数 优点&#xff1a;效率极高&#xff0c;时间复杂度为O&#xff08;aN countN(范围)&#xff09; 缺点&#xff1a;不适合分散的数据&#xff0c;更适合集中数据…

[全连接神经网络]Transformer代餐,用MLP构建图像处理网络

一、MLP-Mixer 使用纯MLP处理图像信息&#xff0c;其原理类似vit&#xff0c;将图片进行分块(patch)后展平(fallten)&#xff0c;然后输入到MLP中。理论上MLP等价于1x1卷积&#xff0c;但实际上1x1卷积仅能结合通道信息而不能结合空间信息。根据结合的信息不同分为channel-mixi…

知识图谱KG+大模型LLM

LLM-based KG KnowLM OpenSPGKG-based RAG 基本原理 从query出发的语义解析 pre-LLM方法 思想&#xff1a;直接将问题解析为对应的逻辑表达式&#xff0c;然后到知识图谱中查询。 方法&#xff1a;通常包含逻辑表达式、语义解析算法、语义解析模型训练三部分。一般步骤是将问句…

【Kafka】Linux本地和Docker安装Kafka

目录 Linux本地安装kafkajava环境配置Zookeeper的安装配置Kafka的安装与配置生产与消费 Docker安装kafkaZookeeper安装Kafka安装 Linux本地安装kafka java环境配置 1、上传jdk-8u261-linux-x64.rpm到服务器并安装&#xff1a; rpm -ivh jdk-8u261-linux-x64.rpm2、配置环境变…

深度学习(4)--Keras实战

一.Keras基础概念 1.1.Keras是什么 Keras是深度学习中的一个神经网络框架&#xff0c;是一个高级神经网络API&#xff0c;用Python编写&#xff0c;可以在TensorFlow&#xff0c;CNTK或Theano之上运行。 Keras优点&#xff1a; (1). 允许简单快速的原型设计&#xff08;用户…

【C++】用wxWidgets实现多文档窗体程序

一、基本步骤和示例代码 在wxWidgets中&#xff0c;要实现多文档窗体程序&#xff0c;通常会使用wxMDIParentFrame和wxMDIChildFrame类来创建一种标准的MDI&#xff08;多文档接口&#xff09;应用。以下是基本步骤和示例代码&#xff0c;演示如何使用wxWidgets创建多文档界面…

Pycharm详细安装 配置教程

继上次安装完Anaconda之后&#xff0c;现在更新最新版本的pycharm的安装和使用教程~~~ Anaconda&#xff1a;是一个开源的Python发行版本&#xff0c;其中包含了conda、Python等180多个科学包及其依赖项。【Anaconda和Pycharm详细安装 配置教程_anconda安装时clear the packag…