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中实现给每个页面顶部设置title

    在vue中实现给每个页面顶部设置title

    这篇文章主要介绍了在vue中实现给每个页面顶部设置title,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • vue绑定的点击事件阻止冒泡的实例

    vue绑定的点击事件阻止冒泡的实例

    下面小编就为大家分享一篇vue绑定的点击事件阻止冒泡的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • antv完成区间柱形图一列多柱配置实现详解

    antv完成区间柱形图一列多柱配置实现详解

    这篇文章主要为大家介绍了antv完成区间柱形图一列多柱配置实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • vue使用directive限制表单输入整数、小数的方法

    vue使用directive限制表单输入整数、小数的方法

    这篇文章主要介绍了vue使用directive限制表单输入整数,小数,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • Element-UI介绍主题定制、自定义组件和插件扩展的代码示例

    Element-UI介绍主题定制、自定义组件和插件扩展的代码示例

    本文介绍了使用Element-UI实现主题定制、自定义组件和扩展插件的方法和实用案例,在开发过程中,我们可以根据自己的需求,灵活选择相关的技术手段,并不断探索和尝试,以提高开发效率和用户体验,感兴趣的朋友跟随小编一起看看吧
    2024-02-02
  • 详解mpvue中小程序自定义导航组件开发指南

    详解mpvue中小程序自定义导航组件开发指南

    这篇笔记主要记录一下基于mpvue的小程序中实现自定义导航的思路及应用。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • Vue路由传参的三种方式实例详解

    Vue路由传参的三种方式实例详解

    vue路由传参的使用场景一般都是应用在父路由跳转到子路由时,携带参数跳转,下面这篇文章主要给大家介绍了关于Vue路由传参的三种方式,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • Vue使用v-viewer实现图片预览

    Vue使用v-viewer实现图片预览

    这篇文章主要为大家详细介绍了Vue使用v-viewer实现图片预览,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10
  • electron-vue+electron-updater实现自动更新(步骤源码)

    electron-vue+electron-updater实现自动更新(步骤源码)

    这篇文章主要介绍了electron-vue+electron-updater实现自动更新,步骤源码包括autoUpdater.js操控更新js文件,main.js也就是package.json内的main指向的js文件,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • Vue项目每次发版后要清理浏览器缓存问题解决办法

    Vue项目每次发版后要清理浏览器缓存问题解决办法

    最近项目更新频繁,每次一更新客户都说还跟之前的一样,一查原因是因为客户没有清空浏览器的缓存,所以为了方便客户看到最新版本,开始调研再发布新版本后自动清理缓存,这篇文章主要给大家介绍了关于Vue项目每次发版后要清理浏览器缓存问题的解决办法,需要的朋友可以参考下
    2024-02-02

最新评论