Vue3+Ts实现父子组件间传值的两种方式

 更新时间:2023年09月06日 10:22:31   作者:sKK07  
这篇文章主要给大家介绍了基于Vue3+Ts实现父子组件间传值的两种方式,使用v-model+emit传值和使用v-bind+emit传值两种方式,文章通过代码示例介绍的非常详细,感兴趣的同学可以参考阅读

概览

方式特点
v-model + emit简单明了,无复杂操作时使用
v-bind + emit功能齐全,使用麻烦,推荐数据处理较多时使用

1、v-model+emit传值

说明:v-model数据双向绑定的指令。

1.1父向子传递数据

1.父组件引入子组件;

2.使用v-model绑定一个引入子组件的属性(如:num);

3.子组件中使用defineProps接收。

1.2子向父传递数据

1.声明defineEmites

2.在defineEmits中声明(event: 'update:num', n: number): void;

3.进行事件触发执行emit('update:num', 40)

代码示例:

// 父组件
<template>
    <div>
        <div>
            <div> 父组件 {{ num1 }}</div>
            <button @click="add">父按钮</button>
        </div>
        <!-- v-model的传值 -->
        <Child v-model:num="num1"></Child>
    </div>
</template>
<script setup lang="ts">
import Child from './02-AppChild.vue'
import { ref } from 'vue'
let num1 = ref(20)
const add = () => {
    num1.value++
}
</script>
<style scoped></style>
//子组件
<template>
    <div>
        <div>子组件{{ num }}</div>
        <div>{{ n }}</div>
        <button @click="hdClick">按钮</button>
    </div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
let props = defineProps({
    num: {
        type: Number,
        default: 100
    }
})
const emit = defineEmits<{
    // update:固定写法,后面的变量是父组件中v-model:后面的这个变量
    (event: 'update:num', n: number): void
}>()
let n = ref(props.num)
const hdClick = () => {
    // emit(上面event的值,要修改成的值)
    emit('update:num', n.value+=10)
}
</script>
<style scoped></style>

效果图

2、使用v-bind+emit

说明:v-bind非双向数据绑定,子组件传来的数据需要进行赋值。

2.1父向子传递数据

1.父组件引入子组件;

2.使用v-bindl绑定一个引入子组件的属性(如:num);

3.子组件中使用defineProps接收。

2.2子向父传递数据

1.声明defineEmites

2.在defineEmits中声明(event: 'fn', n: number): void;

3.进行事件触发执行emit('fn',num3.value)

4.父组件中@fn对应的chanNum接收参数并赋值。

代码示例:

// 父组件
<template>
    <div>
        <!-- 父组件 -->
        <p>{{ num1 }}</p>
        <p>{{ num3 }}</p>
        <button @click="add">父按钮</button>
        <Child :num="num1" @fn="chanNum"></Child>
    </div>
</template>
<script setup lang="ts">
import Child from "./11-AppChild.vue";
import { ref } from "vue";
let num1 = ref(10)
let num3 = ref(0)
const chanNum = (num33:number) => {
    num3.value=num33
}
const add = () => {
    num1.value++
}
</script>
<style scoped></style>
// 子组件
<template>
    <div>
        <!-- 子组件 -->
        <p>{{ num }}</p>
        <p>{{ num3 }}</p>
        <button @click="hdClick">按钮</button>
    </div>
</template>
<script setup lang="ts">
import { ref } from "vue";
defineProps({
    num: {
        type: Number,
        default: 30
    }
})
let num3=ref(30)
// 子传父的时候需要先定义好emit这个方法
const emit = defineEmits<{
	//fn为父组件引入子组件是定义的子组件事件属性,可随意定义
    (event: 'fn', n: number): void
}>()
const hdClick = () => {
    // vue2通过$emit("自定义事件名",参数)
    num3.value+=2
    emit('fn',num3.value)
}
</script>
<style scoped></style>

效果图

总结

  • 父向子组件传参两中方式并没有太大区别,只是在引用子组件声明属性的时候一个是v-model一个是v-bind,在接收参数的时候则完全相同。
  • 对于子组件向父组件传参则大为不同,v-model方式下父组件仅能单调的接收子组件传来的参数不能对传来的数据进行任何操作。除非单独另写逻辑进行处理。而v-bind方式下父组件在接收到子组件传来参数的同时能在声明的方法中对传来的数据和父组件本身的数据进行任意处理。

以上就是Vue3+Ts实现父子组件间传值的两种方式的详细内容,更多关于Vue3+Ts父子组件间传值的资料请关注脚本之家其它相关文章!

相关文章

  • vue + Electron 制作桌面应用的示例代码

    vue + Electron 制作桌面应用的示例代码

    这篇文章主要介绍了vue + Electron 制作桌面应用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-11-11
  • 基于Vue2实现的仿手机QQ单页面应用功能(接入聊天机器人 )

    基于Vue2实现的仿手机QQ单页面应用功能(接入聊天机器人 )

    这篇文章主要介绍了基于Vue2实现的仿手机QQ单页面应用功能(接入聊天机器人 ),非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-03-03
  • Vue echarts模拟后端数据流程详解

    Vue echarts模拟后端数据流程详解

    在平常的项目中,echarts图表我们也是使用的非常多的,通常我们从后端拿到数据,需要在图表上动态的进行呈现,接下来我们就模拟从后端获取数据然后进行呈现的方法
    2022-09-09
  • vue 指令和过滤器的基本使用(品牌管理案例)

    vue 指令和过滤器的基本使用(品牌管理案例)

    这篇文章主要介绍了vue-品牌管理案例-指令和过滤器的相关知识,文中通过代码给大家介绍了过滤器的基本使用,需要的朋友可以参考下
    2019-11-11
  • Vite项目搭建与环境配置的完整版教程

    Vite项目搭建与环境配置的完整版教程

    Vite 使用 Rollup 作为默认的构建工具,可以将应用程序的源代码打包成一个或多个优化的静态文件,本文就来为大家介绍一下Vite如何进行项目搭建与环境配置吧
    2023-09-09
  • 浅析Vue实例以及生命周期

    浅析Vue实例以及生命周期

    这篇文章给大家分享了Vue实例以及生命周期的相关知识点内容,有兴趣的朋友们可以学习下。
    2018-08-08
  • Vue3中的setup语法糖、computed函数、watch函数详解

    Vue3中的setup语法糖、computed函数、watch函数详解

    这篇文章主要介绍了Vue3中的setup语法糖、computed函数、watch函数,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • 浅谈element关于table拖拽排序问题

    浅谈element关于table拖拽排序问题

    本文主要介绍了element关于table拖拽排序问题,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • vue实现倒计时获取验证码效果

    vue实现倒计时获取验证码效果

    这篇文章主要为大家详细介绍了vue实现倒计时获取验证码效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • Vue3中v-slot的特性深度剖析

    Vue3中v-slot的特性深度剖析

    在Vue3架构里,v-slot 作为作用域插槽的关键支撑,重塑了父子组件间数据与方法传递的范式,本文主要来和大家剖析一下v-slot的相关特性,需要的可以了解下
    2025-01-01

最新评论