vue3第二十一节(新增编译宏defineExpose)

news/2024/10/25 8:21:15/

引言:在vue2中我们可以使用 this.$refs.xxx调用组件内部的属性或者方法,同时子组件也可以使用 this.$parent.xxx 调用父组件的属性和方法;

但是
当我们在setup 语法糖中,因为此时的组件默认是关闭即组件是私有的,故使用$parent.xxx 或者 $children.xxx无法获取到对应的实例的; 需要链式调用时候,比如父组件需要调用子组件的属性方法,
那么此时我们可以使用defineExpose()来暴露组件的属性方法

父组件:

<template>
<div>defineExpose parent <div>{{msg}}</div><el-button type="primary" @click="changMsg">父组件调用子组件方法</el-button><hr><ExposeChild ref="child" @changemsg="changMsg"></ExposeChild>
</div>
</template>
<script setup>
import { ref } from 'vue'
import ExposeChild from './components/exposeChild.vue'
// 这里ref() 创建的对象要与模板中 ref='name' 的name 保持一致,不然无法读取 子组件
const child = ref(null)
const msg = ref('Andy')
const changMsg = () => {// 直接通过ref调用 子组件的方法,前提是已经使用defineExpose() 将方法暴露出来child.value.handleChangeName()console.log('==child=', child.value)
}
</script>

子组件:

<template>
<div>defineExpose 子组件name---{{name}}<el-button type="primary" @click="handleChangemsg">子组件调用父组件方法</el-button>
</div>
</template>
<script setup>
import { ref } from 'vue'
const emits = defineEmits(['changemsg'])
const name = ref('Expose')
const handleChangeName = () => {name.value = name.value + '' +'ExposeChange'
}
const handleChangemsg = () => {emits('changemsg')
}
// 不用引入可以直接使用
defineExpose({name, // 暴露出去的属性handleChangeName // 暴露出方法
})
</script>

更多:组件之间通讯传值


http://www.ppmy.cn/news/1431778.html

相关文章

Vue之v-on事件修饰符的含义及使用

背景&#xff1a;Vue 拆封了一个组件&#xff0c;在组件里面会使用一个方法来改变父组件传过来的值&#xff0c; 但是在子组件里面操作父组件的数据变更&#xff0c;实在比较麻烦&#xff08;因为单向数据流&#xff09;&#xff0c; So 能不能直接在组件上面绑定事件方法呢&…

HCIP-Datacom-ARST必选题库_22_SDWAN【1道题】

一、单选 1.SD-WAN解决方案适合如下哪个场景? 企业分支互联 企业数据中心网络内部互联 企业园区无线网络部署 略

使用OpenCV计算滑块缺口

1.参考文章:https://blog.csdn.net/qq_27371025/article/details/133072065 2.实现过程&#xff1a;接口中传入base64 图片&#xff0c;base64转化为image &#xff0c;通过图片获取缺口信息 实现步骤&#xff1a; 2.1 安装&#xff1a;cv2 opencv-python 是 OpenCV&#xff08…

Java 网络编程之TCP(一):基于BIO

环境&#xff1a; jdk 17 IntelliJ IDEA 2023.1.1 (Ultimate Edition) Windows 10 专业版 22H2 TCP&#xff1a;面向连接的&#xff0c;可靠的数据传送协议 Java中的TCP网络编程&#xff0c;其实就是基于常用的BIO和NIO来实现的&#xff0c;本文先讨论BIO&#xff1b; BIO…

uniapp微信小程序分包

一、创建分包文件夹subPack 二、将页面文件放入分包文件夹中 启动页面和导航tabBar页面不要放入分包文件夹中 三、配置pages.json 四、效果

1.微服务介绍

完整的微服务架构图 注册中心 配置中心 服务集群 服务网关 分布式缓存 分布式搜索 数据库集群 消息队列 分布式日志服务 系统监控链路追踪 Jenkins docker k8s 技术栈 微服务治理&#xff1a; 注册发现、远程调用、负载均衡、配置管理、网关路由、系统保护、流量…

python借助elasticsearch实现标签匹配计数

给定一组标签 [{“tag_id”: “1”, “value”: “西瓜”}, {“tag_id”: “1”, “value”: “苹果”}]&#xff0c;我想精准匹配到现有的标签库中存在的标签并记录匹配成功的数量。 标签id(tag_id)标签名(tag_name)标签值(tag_name )1水果西瓜1水果苹果1水果橙子2动物老虎 …

Vue 3 + TypeScript + Vite 2024年4月最新管理系统基建

Vue 3 TypeScript Vite 2024年4月最新管理系统基建 相关依赖 vue: ^3.4.21vite: ^5.2.0typescript: ^5.2.2eslint: ^9.0.0 1. 初始化项目 1.1 node版本要求 node: v18.17.1 1.2. 创建项目 使用 PNPM: # 创建项目 pnpm create vite vue3-element-template --template …