vue3 setup语法糖之组件传参(defineProps、defineEmits、defineExpose)示例详解
作者:Jocelyn_书 发布时间:2024-04-27 16:01:39
标签:vue3,setup,组件传参
vue3官方文档
defineProps
和defineEmits
都是只能在<script setup>
中使用的编译器宏。他们不需要导入,且会随着<script setup>
的处理过程一同被编译掉。defineProps
接收与props
选项相同的值,defineEmits
接收与emits
选项相同的值。
父传子 - defineProps
父组件
<template>
<div class="Father">
<p>我是父组件</p>
<!-- -->
<son :ftext="ftext"></son>
</div>
</template>
<script setup>
import {ref} from 'vue'
import Son from './son.vue'
const ftext = ref('我是父组件-text')
</script>
子组件
<template>
<div class="Son">
<p>我是子组件</p>
<!-- 展示来自父组件的值 -->
<p>接收到的值:{{ftext}}</p>
</div>
</template>
<script setup>
import {ref} from 'vue'
// setup 语法糖写法
//defineProps 来接收组件的传值
const props = defineProps({
ftext: {
type:String
},
})
</script>
子传父 - defineEmits
子组件:
<template>
<div class="Son">
<p>我是子组件</p>
<button @click="toValue">点击给父组件传值</button>
</div>
</template>
<script setup>
import {ref} from 'vue'
// setup 语法糖写法
//用defineEmits()来定义子组件要抛出的方法,语法defineEmits(['要抛出的方法'])
const emit = defineEmits(['exposeData'])
const stext = ref('我是子组件的值-ftext')
const toValue = ()=>{
emit('exposeData',stext)
}
</script>
父组件:
<template>
<div class="Father">
<p>我是父组件</p>
<!-- -->
<son @exposeData="getData" :ftext="ftext"></son>
</div>
</template>
<script setup>
import {ref} from 'vue'
import Son from './son.vue'
const ftext = ref('我是父组件-text')
const getData = (val)=>{
console.log("接收子组件的值",val)
}
</script>
defineExpose
官方解释:
使用 <script setup>
的组件是默认关闭的(即通过模板引用或者 $parent
链获取到的组件的公开实例,不会暴露任何在 <script setup>
中声明的绑定)。
可以通过 defineExpose
编译器宏来显式指定在 <script setup>
组件中要暴露出去的属性
子组件:
<template>
<div>
<p>我是子组件</p>
</div>
</template>
<script setup>
import { ref } from 'vue';
const stext = ref('我是子组件的值')
const sfunction = ()=>{
console.log("我是子组件的方法")
}
defineExpose({
stext,
sfunction
})
</script>
父组件:
<template>
<div class="todo-container">
<p>我是父组件</p>
<son ref="sonDom"></son>
<button @click="getSonDom">点击</button>
</div>
</template>
<script setup>
import { ref ,nextTick} from 'vue';
import son from './components/son.vue'
const sonDom = ref(null) //注意这里的命名要和ref上面的命名一致
const getSonDom = ()=>{
console.log("sonDom",sonDom.value)
}
//直接打印sonDom的值是拿不到的,子组件节点还没生成
nextTick(()=>{
console.log("sonDom",sonDom.value)
})
</script>
来源:https://blog.csdn.net/weixin_42307283/article/details/128716120
0
投稿
猜你喜欢
- 前言:终于来了一篇有质量的文章,我个人感觉非常不错,《jfinal与bootstrap之间的登录跳转实战》。具体内容包含有点击登录弹出模态框
- 经常会遇到这样一个情况:浏览器弹出对话框,提示脚本运行时间过长,询问“停止”还是“继续”。那究竟各个浏览器是如何判断在什么时候才弹出此对话框
- wheel文件Wheel和Egg都是python的打包格式,目的是支持不需要编译或制作的安装过程,实际上也是一种压缩文件,将.whl的后缀改
- 1. 使用ssh密钥免密远程登录服务器如果你还未曾成功远程登陆过服务器,下面这篇博客或许对你有帮助如果你成功远程登陆过服务器,Let'
- SQL Server中误删除数据的恢复本来不是件难事,从事务日志恢复即可。但是,这个恢复需要有两个前提条件:1. 至少有一个误删除之前的数据
- 在一次ASP程序中不能正常连接MSSQL出现出错信息如下:以下为引用的内容:HTTP/1.1 200 OK S
- 用QQ聊过天的朋友都对它的自动隐藏窗口功能爱不释手,它可以使窗口显得清爽整洁而且富有动感,笔者的几个朋
- 代码如下:SELECT * FROM Orders WHERE OrderGUID IN('BC71D821-9E25-
- 我查了资料:setRequestHeader,单独指定请求的某个http头语法oXMLHttpRequest.setRequestHeade
- rs.open sql,conn,A,B A: ADOPenforwardonly (=0) 只读,且当前数据记录只能向下移动。 ADOPe
- 本文实例讲述了Python设计模式之代理模式。分享给大家供大家参考,具体如下:代理模式(Proxy Pattern):为其他对象提供一种代理
- 同步:就是在执行栈中(主线程)执行的代码异步:就是在异步队列(macroTask、microTask)中的代码简单理解区别就是:异步是需要延
- 如何修改数据库名(db_name)及实例名(Instance_name or Service_name) Nid是Oracle从9iR2开始
- 不知道工商银行帐号是否是这样的格式, 如果错了请大家见谅!<script language="javascript"
- 光学元件类平面反射镜是一种极为简单的模型,因为我们只需要考虑一个平面即可。但是除此之外的其他光学元件,可能会变得有些复杂:我们必须考虑光在入
- 一维插值插值不同于拟合。插值函数经过样本点,拟合函数一般基于最小二乘法尽量靠近所有样本点穿过。常见插值方法有拉格朗日插值法、分段插值法、样条
- tensorflow支持14种不同的类型,主要包括:实数:tf.float32 tf.float64整数:tf.int8 tf.int16
- ASP是目前一种广为应用的用来快速构建动态WEB站点的编程语言,默认的内置开发语言是VBScript,由于ASP和微软Windows系列操作
- sysbench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。关于这个项目的详细介绍请看:
- 前言:不用改掉系统python2.7 ,原来是python2.7,我们还进行python2.7的保留1.编译前准备其他库的安装(使用sudo