这是一个使用 Vue3 组合式 API 和 TypeScript 的简单父子组件共享数据示例

父组件 Parent.vue:

<template>
<div>
<p>{{ msg }}</p>
<Child />
</div>
</template> <script lang="ts">
import { ref } from 'vue'
import Child from './Child.vue' export default {
components: { Child },
setup() {
const msg = ref('Hello from Parent!')
return { msg }
}
}
</script>

子组件 Child.vue:

<template>
<div>
<p>Hello, my name is {{ name }}</p>
</div>
</template> <script lang="ts">
import { ref } from 'vue' export default {
setup() {
const name = ref('John')
return { name }
}
}
</script>

父组件通过components属性注册子组件,并在模板中使用;子组件有自己的状态和数据逻辑。

两者之间的通信方式有:

  1. 父传子:通过子组件的props接收父组件传递的数据

修改父组件:

<template>
<div class="parent">
<p>{{ msg }}</p>
<Child :text="text"/>
</div>
</template> <script lang="ts">
import {ref} from 'vue'
import Child from '@/components/Child.vue' export default {
components: {Child},
setup() {
const msg = ref('Hello from Parent!')
const text = ref('some text')
return {msg, text}
}
}
</script> <style>
.parent {
background-color: #ffffff;
}
</style>

修改子组件:

<template>
<div class="child">
<p>Hello, my name is {{ name }}</p>
<p>{{ text }}</p>
</div>
</template> <script lang="ts">
import {ref} from 'vue' export default {
props: {
text: String
},
setup(props: { text: string }) {
console.log(props)
const name = ref('John')
return {name}
}
}
</script> <style>
.child {
background-color: #ffffff;
}
</style>

然后在子组件模板使用{{ text }}接收,也可以在setup中使用props

  1. 子传父:通过自定义事件@change,获取子组件传参

修改父组件:

<template>
<div class="parent">
<p>{{ msg }}</p>
<Child :text="text" @change="onChange"/>
<p>{{childText}}</p>
</div>
</template> <script lang="ts">
import {ref} from 'vue'
import Child from '@/components/Child.vue' export default {
components: {Child},
setup(props: any, {expose}: any) {
const msg = ref('Hello from Parent!')
const text = ref('some text')
const childText = ref("") const onChange = (text: string) => {
childText.value = text;
} return {msg, text, childText, onChange}
}
}
</script> <style>
.parent {
background-color: #ffffff;
}
</style>

修改子组件:

<template>
<div class="child">
<p>Hello, my name is {{ name }}</p>
<p>{{ text }}</p>
</div>
</template> <script lang="ts">
import {ref} from 'vue' export default {
props: {
text: String
},
emits: ['update'],
setup(props: { text: string }, {emit}: any) {
console.log(props);
const name = ref('John')
emit('change', 'emit change') return {name}
}
}
</script> <style>
.child {
background-color: #ffffff;
}
</style>

在子组件中调用emit('change', 'emit change')就可以触发父组件的方法。

ai问答:使用 Vue3 组合式API 和 TS 父子组件共享数据的更多相关文章

  1. vue3组合式API

    vue3组合式API 为什么要用组合式API,我们来看看它是如何解决vue2的局限性的 1.vue2的局限性 当组件内容越来越多,逻辑越来越复杂,可读性就会降低,并且难以维护. vue2组件采用配置式 ...

  2. vue3组合式API介绍

    为什么要使用Composition API? 根据官方的说法,vue3.0的变化包括性能上的改进.更小的 bundle 体积.对 TypeScript 更好的支持.用于处理大规模用例的全新 API,全 ...

  3. [Vue]浅谈Vue3组合式API带来的好处以及选项API的坏处

    前言 如果是经验不够多的同志在学习Vue的时候,在最开始会接触到Vue传统的方式(选项式API),后边会接触到Vue3的新方式 -- 组合式API.相信会有不少同志会陷入迷茫,因为我第一次听到新的名词 ...

  4. 解决WebStorm无法正确识别Vue3组合式API的问题

    1 问题描述 Vue3的组合式API无法在WebStorm中正确识别,表现为defineComponent等无法被识别: 2 尝试方案 猜想这种问题的原因是无法正确识别对应的Vue3库,笔者相信Web ...

  5. Vue3 组合式 API 中获取 DOM 节点的问题

    模板引用 Vue 提供了许多指令让我们可以直接操作组件的模板.但是在某些情况下,我们仍然需要访问底层 DOM 元素.在模板中添加一个特殊的属性ref就可以得到该元素. 访问模板引用 <scrip ...

  6. 第三十五篇:vue3,(组合式api的初步理解)

    好家伙, 来一波核心概念:数据劫持是响应式的核心 1.由set up开始 (1)vue3中的一个新的配置项,值为一个函数. (2)组件中所用的到的:数据,方法,计算属性均要配置在set up中. (3 ...

  7. Vue3笔记(二)了解组合式API的应用与方法

    一.组合式API(Composition API)的介绍 官方文档: https://v3.cn.vuejs.org/guide/composition-api-introduction.html 组 ...

  8. 一篇文章讲明白vue3的script setup,拥抱组合式API!

    引言 vue3除了Composition API是一个亮点之外,尤大大又给我们带来了一个全新的玩意 -- script setup,对于setup大家相信都不陌生,而对于script setup有些同 ...

  9. Vue3全局APi解析-源码学习

    本文章共5314字,预计阅读时间5-15分钟. 前言 不知不觉Vue-next的版本已经来到了3.1.2,最近对照着源码学习Vue3的全局Api,边学习边整理了下来,希望可以和大家一起进步. 我们以官 ...

  10. 纯小白入手 vue3.0 CLI - 2.5 - 了解组件的三维

    vue3.0 CLI 真小白一步一步入手全教程系列:https://www.cnblogs.com/ndos/category/1295752.html 我的 github 地址 - vue3.0St ...

随机推荐

  1. Linux 截图快捷键 - 搬运

    Linux 截图快捷键 转自:linux 截图快捷键 环境 Linux Mint  21.1 1. Prt ScSysRq ---->全屏截图2. Shift+Prt ScSysRq ----& ...

  2. linux上安装nmon

    转载:https://blog.csdn.net/qq_35304570/article/details/813510651.新建目录:mkdir/nmon2.下载nmon包到本地 http://nm ...

  3. GameObject.Find()、Transform.Find()查找游戏对象

    GameObject.Find 按广度进行查找 GameObject.Find("GameObject"); GameObject.Find("GameObject/Ch ...

  4. WordPress安全方案

    一.WordPress介绍WordPress是一款世界级的网站内容管理系统,因其系统结构科学合理,功能强大,操作简单,拥有海量用户.和其他CMS一样,安全漏洞也是其无法避免的问题.虽然官方不断发布补丁 ...

  5. JAVA加载PMML算法模型

    注:加载失败时尝试修改pmml文件版本为4.3 依赖 <dependency> <groupId>org.jpmml</groupId> <artifactI ...

  6. 使用vCenter对ESXi主机进行补丁升级

    使用vCenter 对ESXi 主机进行补丁升级 背景说明:公司内部有许多ESXi主机需要进行补丁升级,记录一下通过vCenter对ESXi主机进行补丁升级的过程,也可以使用esxcli命令行方式: ...

  7. Java笔记第九弹

    升级版: 数据安全问题的解决 1.同步代码块 (弊端:降低了运行效率) 格式:(锁--同一把锁) synchronized(任意对象){ 多条语句操作共享数据的代码 } //sellTicket.ja ...

  8. Echarts中slider滑块调整样式

    今天遇到了一个问题,记录一下. 效果图. 原型图 一个页面中,引入了echarts的柱状图来动态显示数据,由于柱状图太高,echarts没有自动生成的滚动条,所以就用slider滑块手写了一个,但是效 ...

  9. 在wxpython框架写的GUI中调用GIF格式图片,显示在指定行列的方法

    #首先需要从 wx.adv 模块导入 Animation, AnimationCtrl方法 from wx.adv import Animation, AnimationCtrl #然后在面板实现过程 ...

  10. 刷爆 LeetCode 周赛 337,位掩码/回溯/同余/分桶/动态规划·打家劫舍/贪心

    本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 大家好,我是小彭. 上周末是 LeetCode 第 337 场周赛,你参加了吗?这场周赛第三题有点放水,如果 ...