vue3 的 lang=“ts“ setup 方式 父子组件传参

在 Vue 3 中使用 lang="ts"setup 语法进行父子组件传参,可以通过 props 从父组件向子组件传递数据,或通过 emits 从子组件向父组件发送事件。以下是详细步骤。

1. 父组件向子组件传递数据

假设我们有一个父组件 ParentComponent.vue 和一个子组件 ChildComponent.vue,并且在父组件中想要向子组件传递数据。

ParentComponent.vue
<template>
  <div>
    <ChildComponent :message="parentMessage" />
  </div>
</template>

<script lang="ts" setup>
import { ref } from 'vue';
import ChildComponent from './ChildComponent.vue';

const parentMessage = ref('Hello from Parent');
</script>
  • parentMessage 是父组件中的数据,通过 message 属性传递给子组件。
  • 使用 lang="ts" 开启 TypeScript 支持。
ChildComponent.vue
<template>
  <div>{{ message }}</div>
</template>

<script lang="ts" setup>
import { defineProps } from 'vue';

interface Props {
  message: string;
}

const props = defineProps<Props>();
</script>
  • 在子组件中,使用 defineProps 定义了 Props 接口,并在其中定义 message 属性类型为 string
  • 子组件可以通过 props.message 来访问父组件传递的数据。

2. 子组件向父组件发送事件

子组件可以通过 emit 方法触发自定义事件,让父组件接收事件。

ParentComponent.vue
<template>
  <div>
    <ChildComponent @updateMessage="handleUpdateMessage" />
    <p>{{ updatedMessage }}</p>
  </div>
</template>

<script lang="ts" setup>
import { ref } from 'vue';
import ChildComponent from './ChildComponent.vue';

const updatedMessage = ref('');

function handleUpdateMessage(newMessage: string) {
  updatedMessage.value = newMessage;
}
</script>
  • handleUpdateMessage 函数处理来自子组件的事件,并更新 updatedMessage 的值。
ChildComponent.vue
<template>
  <button @click="sendMessage">Send Message to Parent</button>
</template>

<script lang="ts" setup>
import { defineEmits } from 'vue';

const emit = defineEmits<{
  (event: 'updateMessage', newMessage: string): void;
}>();

function sendMessage() {
  emit('updateMessage', 'Hello from Child');
}
</script>
  • 使用 defineEmits 定义 updateMessage 事件,指定事件名称和参数类型。
  • sendMessage 函数触发 updateMessage 事件,将消息传递给父组件。
### Vue 3与TypeScript集成指南及最佳实践 #### 安装依赖项 为了使Vue 3项目支持TypeScript,需安装必要的包。通过npm或yarn来完成这些操作: ```bash npm install typescript @vue/cli-plugin-typescript --save-dev ``` 或者使用Yarn: ```bash yarn add typescript @vue/cli-plugin-typescript --dev ``` 这一步骤确保了开发环境能够识别并编译TypeScript文件[^1]。 #### 创建`.ts`配置文件 创建一个名为`tsconfig.json`的文件于项目的根目录下,并添加基本设置以便更好地兼容Vue单文件组件(SFCs): ```json { "compilerOptions": { "target": "esnext", "module": "esnext", "strict": true, "jsx": "preserve", "importHelpers": true, "moduleResolution": "node", "skipLibCheck": true, "esModuleInterop": true, "allowSyntheticDefaultImports": true, "sourceMap": true, "baseUrl": ".", "types": [ "webpack-env" ], "paths": { "@/*": [ "src/*" ] }, "lib": [ "esnext", "dom", "dom.iterable", "scripthost" ] }, "include": [ "src/**/*.ts", "src/**/*.tsx", "src/**/*.vue", "!node_modules" ], "exclude": [ "node_modules" ] } ``` 此配置有助于提高IDE中的类型推断能力以及减少潜在错误的发生概率[^2]. #### 使用Composition API增强型功能 借助Vue Composition API可以更方便地利用TypeScript的优势编写逻辑清晰且易于维护的应用程序代码片段。下面是一个简单的例子展示如何定义响应式的属性和方法: ```typescript <script setup lang="ts"> import { ref } from &#39;vue&#39; const count = ref<number>(0) function increment() { count.value++ } </script> <template> <button @click="increment">{{count}}</button> </template> ``` 上述实例展示了如何声明带有特定类型的变量并通过组合API模式将其绑定到视图层面上去[^3]. #### 类型安全的Props传递机制 当向子组件传入props时,可以通过接口的形式精确指定参数及其对应的类型,从而实现更加严格的静态分析过程: ```typescript // ParentComponent.vue <ChildComponent :message="&#39;Hello World&#39;" /> // ChildComponent.vue export interface Props { message?: string; } defineProps<Props>(); ``` 这样做不仅提高了可读性和健壮性,同时也减少了运行时期间可能出现的数据不一致问题[^4].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值