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

news2024/11/26 4:53:51

文章目录

  • 写在前面
  • 1、v-model+emit传值
    • 1.1父向子传递数据
    • 1.2子向父传递数据
  • 2、使用v-bind+emit
    • 2.1父向子传递数据
    • 2.2子向父传递数据
  • 总结


写在前面

对于常用的组件间传参最近有了有点小心得总结一下,主要是两种子向父组件传参的方式总结。欢迎评论区讨论

概览

方式特点
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>
        <!-- 父组件 -->
        <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>
        <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>

效果图在这里插入图片描述


总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux的服务器日志分析及性能调优

作为网络安全和数据传输的重要环节&#xff0c;代理服务器在现代互联网中扮演着至关重要的角色。然而&#xff0c;在高负载情况下&#xff0c;代理服务器可能面临性能瓶颈和效率问题。本文将介绍如何利用Linux系统对代理服务器进行日志分析&#xff0c;并提供一些实用技巧来优化…

数组模拟实现环形队列

目录 前言 一、什么是队列? 二、数组模拟非环形队列的实现 三 . 数组模拟环形队列 总结 前言 笔者: 最爱吃兽奶 博文内容: 数据结构队列的模拟实现 这篇博客理解起来或许没有那么简单,我尽力讲的容易理解一点,接下来跟我一起去看看吧! 一、什么是队列? 队列是一种特殊…

#452. 序列操作

序列操作 - 题目 - Daimayuan Online Judge 问题描述&#xff1a; 思路&#xff1a;首先想的是第二次操作的y可以将前面所以操作进行抵消&#xff0c;只需要第二次操作的最大值即可。但是发现&#xff0c;对于第一个操作&#xff0c;它是单点修改&#xff0c;每修改一次对于第…

2023年7月京东投影仪行业品牌销售排行榜(京东大数据)

鲸参谋监测的京东平台7月份投影仪行业销售数据已出炉&#xff01; 7月份&#xff0c;投影仪市场呈现增长趋势。根据鲸参谋平台的数据可知&#xff0c;7月京东平台投影仪的销量将近20万&#xff0c;同比增长约16%&#xff1b;销售额将近3.8亿&#xff0c;同比增长约4%。 ​*数据…

机器人中的数值优化(十一)——高斯牛顿法、LMF方法、Dogleg方法

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考&#xff0c;主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等&#xff0c;本系列文章篇数较多&#xff0c;不定期更新&#xff0c;上半部分介绍无约束优化&#xff0c;…

MySQL——MySQL的基础操作部分

使用命令行登录 mysql -u root -p 直接敲击回车后输入密码即可&#xff1a; 当看到出现“mysql>“的符号之后&#xff0c;就表示已经进入到了&#xff2d;&#xff59;&#xff33;&#xff31;&#xff2c;系统中&#xff0c;就可以输入&#xff2d;&#xff59;&#xf…

Streamlit项目:乐高风格马赛克设计工坊~打造个性化马赛克图案的平台

文章目录 1 前言2 项目概述2.1 项目背景和目标2.2 功能和特性2.3 技术实现2.4 开发计划2.5 预期成果2.6 应用场景 3 使用指南3.1 源代码使用指南3.2 普通网页用户使用指南3.3 文件保存3.3.1 导出图像文件3.3.2 获取像素RGB数据 3.4 注意事项 4 实现细节4.1 准备工作4.2 编写代码…

如何手动读取 GLTF/GLB 文件

推荐&#xff1a;使用NSDT场景编辑器快速搭建3D应用场景 文件类型 GLTF文件有两种不同的主要文件类型&#xff1a;.gltf和.glb。 GLTF文件本质上只是一个重新命名的json文件&#xff0c;它们通常与包含顶点数据等内容的.bin文件相提并论&#xff0c;但这些内容也可以直接包含…

聊聊大模型位置编码及其外推性

作者 | 王嘉宁 整理 | NewBeeNLP https://wjn1996.blog.csdn.net/article/details/131753251 大家好&#xff0c;这里是 NewBeeNLP。 现如今很多大模型都开始支持超过4096长度的推理&#xff0c;例如GPT-4支持超过30k&#xff0c;ChatGLM2-6B也支持最长为32K的文本。但是由于显…

CentOS7安装时直接跳过了安装信息摘要页面的解决方法

最近在配置Hadoop虚拟机的时候&#xff0c;创建的centos7虚拟机在安装信息摘要时直接自动跳过&#xff0c;直接跳到设置用户名和密码&#xff0c;在重复多次的重新删除安装后发现了问题所在&#xff1a; 在进行到选择操作系统来源时&#xff0c;注意是否出现“该操作系统将使用…

matplotlib设置绘图中文标记

项目场景 使用matplotlib时为图形设置x轴标记&#xff0c;y轴标记&#xff0c;标题默认只能使用英文&#xff0c;当使用中文时会出现以下错误&#xff1a; UserWarning: Glyph 32654 (\N{CJK UNIFIED IDEOGRAPH-7F8E}) missing from current font. 解决方法 在引入matplotl…

成功的硬件公司不仅是产品,更是一种创新文化

目录 内容简介 客户 建立公司&#xff0c;而不仅仅是产品 CSDN学院 作者简介 内容简介 很多时候&#xff0c;你决定去做一件事、一款产品&#xff0c;往往都始于一个想法、一个灵感。 然后&#xff0c;许多硬件创业者会花费数月、甚至是数年的时间来确定并分析他们的想法…

基于ITIL的ITSM工具

随着企业的ITSM(IT服务管理)的逐渐成熟进而深入应用&#xff0c;如果您希望以低成本寻找一款基于ITIL的ITSM管理工具&#xff0c;然后那么卓豪ServiceDesk Plus将是您性价比高的免费ITSM、工单系统选择。因为它提供全面的ITSM和资产管理能力&#xff0c;更重要的是&#xff0c;…

java八股文面试[多线程]——CompletableFuture

1 CompletableFuture介绍 平时多线程开发一般就是使用Runnable&#xff0c;Callable&#xff0c;Thread&#xff0c;FutureTask&#xff0c;ThreadPoolExecutor这些内容和并发编程息息相关。相对来对来说成本都不高&#xff0c;多多使用是可以熟悉这些内容。这些内容组合在一起…

全国唯一一所初试考Java的学校!平均300分拿下

苏州科技大学 考研难度&#xff08;☆&#xff09; 内容&#xff1a;23考情概况&#xff08;拟录取和复试分析&#xff09;、院校概况、23专业目录、23复试详情、各专业考情分析、各科目考情分析。 正文1187字&#xff0c;预计阅读&#xff1a;3分钟 2023考情概况 苏州科技…

澳大利亚纽扣电池/含纽扣电池商品合规认证详细解答

近期收到很多客户前来咨询亚马逊澳洲站纽扣电池或含纽扣电池商品的合规性认证&#xff0c;和我说我做了认证了&#xff0c;为什么还是审核不通过&#xff0c;审核被拒呢&#xff1f; 一般是两种情况&#xff1a; 一&#xff1a;检测标准没有做对或对亚马逊合规政策的标准有误…

四川玖璨电子商务有限公司:短视频及直播运营

​ &#xfeff;短视频及直播运营是当下最火热的互联网行业之一&#xff0c;它以轻松、有趣的方式改变了人们的生活和娱乐方式。作为一名短视频及直播运营实训学员&#xff0c;我有幸得到了具体的操作指导和实践机会&#xff0c;让我对这个行业有了更深入的了解。 在短视频及直…

怎么激活IDM

IDM是一个下载软件。 激活它需要用到git上面的一个项目&#xff0c;同时网络要能连到github GitHub - lstprjct/IDM-Activation-Script: IDM Activation & Trail Reset Script WINR 输入powershell 输入命令行 iex(irm is.gd/idm_reset) 或者 iwr -useb https://raw.…

numba,一个强大的 python 库

今天给大家分享一个强大的 python 库&#xff0c;numba。 https://github.com/numba/numba Pandas 是 Python 中流行的数据分析库。然而&#xff0c;随着数据集大小的增长&#xff0c;原生 Python 代码对于滚动窗口计算等关键操作可能会变得很慢。这就是 Numba 用武之地。 N…

一种编程语言,

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…