vue3中使用defineProps、defineEmits和defineExpose

一、defineProps

父组件通过 v-bind 绑定一个数据,然后子组件通过 defineProps 接受传过来的值。

父组件:

<template>
  <StudyDefineProps :title="title" />
</template>

<script setup lang="ts">
import { ref } from 'vue'
import StudyDefineProps from './views/components/studyDefineProps.vue'

const title = ref('题目')
</script>

1.子组件中接受父组件传过来的值 defineProps 

<template>
  <div>{{ title }}</div>
  <br />
  <div>{{ arr }}</div>
</template>

<script setup lang="ts">
import { ref, reactive } from 'vue'
// 接受父组件传过来的值defineProps
defineProps({
  title: {
    type: String,
    default: '标题'
  },
  arr: {
    type: Array,
    default: () => [1, 2, 3]
  }
})
</script>

结果:

2.结合 ts 使用:运行结果与上方相同

<template>
  <div>{{ title }}</div>
  <br />
  <div>{{ arr }}</div>
</template>

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

// ts 特有定义默认值 withDefaults,第一个参数为props函数,第二个参数为一个对象设置默认值
withDefaults(
  defineProps<{
    title: string
    arr: number[]
  }>(),
  {
    arr: () => [1, 2, 3]
  }
)
</script>

这两种方法接收的值可以在模板中使用,但是不能用 js 调用,会报错。 

3.如果想要使用 js 调用,需要一个参数来接收

// 接受父组件传过来的值defineProps
const props = defineProps({
  title: {
    type: String,
    default: '标题'
  },
  arr: {
    type: Array,
    default: () => [1, 2, 3]
  }
})
console.log('props', props)

结合 ts 调用:

// ts 特有定义默认值 withDefaults,第一个参数为props函数,第二个参数为一个对象设置默认值
const props = withDefaults(
  defineProps<{
    title: string
    arr?: number[]
  }>(),
  {
    arr: () => [1, 2, 3]
  }
)
console.log('props', props)

结果:

二、defineEmits 

子组件给父组件传参,是通过 defineEmits 派发一个事件。

父组件:在父组件中通过 v-on 绑定一个事件。

<template>
  <StudyDefineProps :title="title" @handle-click="handleClick" />
</template>

<script setup lang="ts">
import { ref } from 'vue'
import StudyDefineProps from './views/components/studyDefineProps.vue'

const title = ref('题目')

const handleClick = (title: string) => {
  console.log('收到', title)
}
</script>

子组件:子组件中使用 defineEmits 注册了一个自定义事件,点击 click 触发 emit 去调用注册的事件,然后传递参数。父组件接受子组件的事件。

<template>
  <div>{{ title }}</div>
  <br />
  <button @click="changeParentData">修改父组件数据</button>
</template>

<script setup lang="ts">
import { ref, reactive } from 'vue'
const props = withDefaults(
  defineProps<{
    title: string
    arr?: number[]
  }>(),
  {
    arr: () => [1, 2, 3]
  }
)

const emit = defineEmits(['handleClick'])

const changeParentData = () => {
  emit('handleClick', '标题')
}
</script>

打印结果:

结合 ts 使用: 

const emit = defineEmits<{
  (e: 'handleClick', title: string): void
}>()

 三、defineExpose

父组件想要读到子组件的属性可以通过子组件 defineExpose 暴露。

子组件:

<template>
  <div>{{ title }}</div>
  <br />
  <button @click="changeParentData">修改父组件数据</button>
</template>

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

// ts 特有定义默认值 withDefaults,第一个参数为props函数,第二个参数为一个对象设置默认值
const props = withDefaults(
  defineProps<{
    title: string
    arr?: number[]
  }>(),
  {
    arr: () => [1, 2, 3]
  }
)

const emit = defineEmits<{
  (e: 'handleClick', title: string): void
}>()

const changeParentData = () => {
  emit('handleClick', '标题')
}

defineExpose({
  name: '张三',
  age: () => console.log(18)
})
</script>

 父组件:这样父组件就可以读到了

<template>
  <StudyDefineProps ref="studyDefineProps" :title="title" @handle-click="handleClick" />
</template>

<script setup lang="ts">
import { ref } from 'vue'
import StudyDefineProps from './views/components/studyDefineProps.vue'

const studyDefineProps = ref<InstanceType<typeof StudyDefineProps>>()
const title = ref('题目')

const handleClick = (title: string) => {
  console.log('收到', studyDefineProps.value?.name, studyDefineProps.value?.age)
}
</script>

打印结果:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何设置EVM/IMA密钥即如何生成签名密钥和证书

为生成和使用签名密钥来配置 IMA&#xff0c;以下是详细步骤&#xff0c;包括如何生成签名密钥和证书。 1. 生成签名密钥和证书 首先&#xff0c;我们需要一个私钥和一个自签名证书。我们将使用 OpenSSL 来生成这些密钥和证书。 生成私钥 openssl genpkey -algorithm RSA -…

k8s之HPA,命名空间资源限制

一、HPA 的相关知识 HPA&#xff08;Horizontal Pod Autoscaling&#xff09;Pod 水平自动伸缩&#xff0c;Kubernetes 有一个 HPA 的资源&#xff0c;HPA 可以根据 CPU 利用率自动伸缩一个 Replication Controller、Deployment 或者Replica Set 中的 Pod 数量。 &#xff08;…

idea ctrl+shift+f 全局搜索失效的解決方法

一定是輸入法的問題&#xff0c;而且是簡繁輸入快捷鍵的問題 你看我按了ctrlshiftf 之后直接打出来繁体字了。微软拼音的解决方法如下&#xff1a; 打开微软拼音输入法设置 关闭它

【稳定检索/投稿优惠】2024年心理健康与社会科学国际会议(MHSS 2024)

2024 International Conference on Mental Health and Social Sciences 2024年心理健康与社会科学国际会议 【会议信息】 会议简称&#xff1a;MHSS 2024截稿时间&#xff1a;点击查看大会地点&#xff1a;中国三亚会议官网&#xff1a;www.icmhss.com会议邮箱&#xff1a;mhs…

刷代码随想录有感(101):动态规划——有障碍的最短路径

题干&#xff1a; 代码&#xff1a; class Solution { public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int m obstacleGrid.size();int n obstacleGrid[0].size();if(obstacleGrid[0][0] 1 || obstacleGrid[m - 1][n - 1] 1)r…

python-docx初探——如何用python新建world—添加段落、标题、表格

python-docx初探&#x1f680; 在项目中需要用到使用代码来编写一些结构化的文档&#xff0c;所以这里就需要涉及到一些需要用代码写world的一些工作&#xff0c;经过简单了解&#xff0c;python操作world最主要使用的就是python-docx文档&#xff0c;所以这次就先学一下这个库…

便民智慧小程序源码系统 同城信息+商家联盟+生活电商 功能强大 带完整的安装代码包以及搭建部署教程

系统概述 便民智慧小程序源码系统是一个高度集成化的本地化服务平台解决方案&#xff0c;它融合了同城信息发布、商家联盟管理和生活电商平台三大核心模块&#xff0c;旨在打造一个全方位、多维度的生活服务生态系统。该系统采用先进的前后端分离架构&#xff0c;支持快速响应…

Cartographer学习笔记

Cartographer 是一个跨多个平台和传感器配置提供 2D 和 3D 实时同步定位和地图绘制 (SLAM) 的系统。 1. 文件关系 2. 代码框架 common: 定义了基本数据结构和一些工具的使用接口。例如&#xff0c;四舍五入取整的函数、时间转化相关的一些函数、数值计算的函数、互斥锁工具等…

变量的基本原理

目录 注意&#xff1a; 程序中 号的使用 数据类型 string类 变量相当于内存中一个数据存储空间的表示&#xff0c;你可以把变量看做是一个房间的门牌号&#xff0c;通过门牌号我们可以找到房 间&#xff0c;而通过变量名可以访问到变量(值)。 int age 30; double score …

iFlyCode:AI智能编程助手引领未来软件开发新趋势

体验地址 在当前软件行业飞速发展的背景下&#xff0c;开发效率和代码质量成为了衡量软件工程师工作效能的两大关键指标。为了应对日益增长的市场需求和紧迫的发布时间&#xff0c;科大讯飞推出了iFlyCode2.0——一款集AI技术于一身的智能编程助手&#xff0c;旨在引领未来软件…

Linux C语言:指针的运算

一、指针的算术运算 1、指针运算 指针运算是以指针所存放的地址作为运算量而进行的指针运算的实质就是地址的计算 2、指针的算数运算 指针加上整数&#xff0c;指针减去整数, 指针递增&#xff0c;指针递减和两个指针相减。 指针加减一个n的运算: px n px - n 移动步长…

Windows远程桌面连接

试验&#xff1a;使用Oracle VM VirtualBox创建虚拟机与物理机进行远程桌面连接实验 1. 准备 使用VirtualBox创建一台win10虚拟机&#xff0c;并与本地物理机相互ping通。&#xff08;注意&#xff1a;如何存在ping不通&#xff0c;可以试一下关闭Windows的防火墙&#xff09;…

【机器学习】机器学习与金融科技在智能投资中的融合应用与性能优化新探索

文章目录 引言机器学习与金融科技的基本概念机器学习概述监督学习无监督学习强化学习 金融科技概述股票预测风险管理资产配置 机器学习与金融科技的融合应用实时市场数据分析数据预处理特征工程 股票预测与优化模型训练模型评估 风险管理与优化深度学习应用 资产配置与优化强化…

突破管理瓶颈:基于前端技术的全面预算编制系统解析

前言 在现代商业环境中&#xff0c;预测销售数据和实际成本是每个公司CEO和领导都极为重视的关键指标。然而&#xff0c;由于市场的不断变化&#xff0c;准确地预测和管理这些数据变得愈发具有挑战性。为了应对这一挑战&#xff0c;建立一个高效的系统来管理和审查销售数据的重…

从PCB到芯片的电源控制

随着硅技术的进步&#xff0c;ASIC 密度更高&#xff0c;逻辑电压随之降低。较低的电压与较高的电流要求相结合&#xff0c;要求电源具有更严格的容差。从 PCB 到芯片的电源控制是本研究的主题。使用典型旁路值的频率扫描仿真表明&#xff0c;分立封装电容器并不是降低芯片电源…

Java面试八股之子类可以从父类继承哪些内容

Java子类可以从父类继承哪些内容 Java子类可以从父类继承以下内容&#xff1a; 属性&#xff08;Fields/Variables&#xff09;&#xff1a; public&#xff1a;子类可以继承父类所有的public修饰的属性。 protected&#xff1a;子类可以继承父类所有的protected修饰的属性…

Redisson 实现分布式锁

1、相关配置 Component public class RedissonDistributedLock {Autowiredprivate RedissonClient redissonClient;public boolean tryLock(String lockKey, long expireTime, long waitTime) throws InterruptedException {RLock lock redissonClient.getLock(lockKey);retu…

C++ 引用 - 引用的特点|在优化程序上的作用

引用是C 的一个别名机制&#xff0c;所谓别名&#xff0c;就是同一块内存共用多个名字&#xff0c;每个名字都指的是这片空间&#xff0c;通过这些别名都能访问到同样的一块空间。 就像鲁迅和周树人是同一个人。 ——鲁迅 一、引用的基本用法 int a 10; int& ref a; // …

Python实现base64加密/解密

实现原理&#xff1a;导入base64库 一、加密 import base64# 加密 username "admin" base64_username base64.b64encode(username.encode(utf-8)).decode() print(base64_username) password "123" base64_password base64.b64encode(password.encod…

腾讯云大数据ES Serverless

Elasticsearch&#xff1a;日志和搜索场景首选解决方案。 技术特点&#xff1a;分布式、全文搜索和数据分析引擎&#xff0c;可以对海量数据进行准实时地存储、搜索和统计分析。 ES的技术栈一共包含四个组件&#xff1a; 其中最核心的是Elasticsearch&#xff0c;可用于数据…