首页 > 其他分享 >vue3中父组件与组件之间参数传递,使用(defineProps/defineEmits),涉及属性传递,对象传递,数组传递,以及事件传递

vue3中父组件与组件之间参数传递,使用(defineProps/defineEmits),涉及属性传递,对象传递,数组传递,以及事件传递

时间:2023-07-11 11:45:26浏览次数:51  
标签:const 传递 let vue3 组件 ref defineProps

Vue3 中子父组件之间的通信

一、父组件传递参数到子组件 采用defineProps

传递属性

父组件:

<template>
<div>
<h1>这是父组件</h1>
<h1>父组件像子组件传递参数</h1>
<h2>传递属性值</h2>

<HH :fatherMessage="fatherMessage" :valNum="valNum" :valBool="valBool" />
</div>
</template>

<script setup>
import { ref } from "vue";
import HH from "@/components/HelloWorld";
//定义参数进行传递到子组件
let fatherMessage = ref("大头"); //字符
let valNum = ref(1); //数字
let valBool = ref(true); //布尔类型

</script>

<style>
</style>

子组件:

<template>
<div>
<h1>这是子组件</h1>
<h2>属性值接收区</h2>
<div style="margin: 5px; border: 2px solid gold">
父组件传值接收区:字符型:{{ fatherMessage }},数字类型:{{
valNum
}},布尔类型:{{ valBool }}
</div>
</div>
</template>
<script setup>
import { defineProps, defineEmits } from "vue";
//使用defineProps接收父组件传递的参数
defineProps({
fatherMessage: {
type: String,
},
valNum: {
type: Number,
},
valBool: {
type: Boolean,
},
});

</script>

传递对象或者数组

父组件:

<template>
<div>
<h1>这是父组件</h1>
<h1>父组件像子组件传递参数</h1>
<h2>传递属性值</h2>
<HH
:fatherMessage="fatherMessage"
:valNum="valNum"
:valBool="valBool"
:testprop="testprop"
:testprops="testpropLlist"
/>

</div>
</template>

<script setup>
import { ref, reactive } from "vue";
import HH from "@/components/HelloWorld";
let fatherMessage = ref("大头"); //字符
let valNum = ref(1); //数字
let valBool = ref(true); //布尔类型
//定义数组
const propsList = [
{ name: "李四", Id: 1 },
{ name: "张三", Id: 2 },
{ name: "王麻子", Id: 3 },
];
//定义对象
const myObj = reactive({
name: "zs",
age: 20,
});

let testprop = ref(myObj);

let testpropLlist = ref(propsList);

</script>

<style>
</style>

子组件:

<template>
<div>
<h1>这是子组件</h1>
<h2>属性值接收区</h2>
<div style="margin: 5px; border: 2px solid gold">
父组件传值接收区:字符型:{{ props.fatherMessage }},数字类型:{{
props.valNum
}},布尔类型:{{ props.valBool }}
</div>
<h2>对象/数组接收区</h2>
<div style="margin: 5px; border: 2px solid rgb(77, 52, 219)">
父组件传值接收区: 对象接收:{{ props.testprop }},数组接收:{{
props.testprops
}},数组单个值:{{ vvv }}} ,循环数组的值:
<ul>
<li v-for="item in props.testprops" :key="item.Id">
{{ item.name }}
</li>
</ul>
</div>

</div>
</template>
<script setup>
import { defineProps, defineEmits, toRefs } from "vue";
const props = defineProps({
fatherMessage: {
type: String,
},
valNum: {
type: Number,
},
valBool: {
type: Boolean,
},
//接收对象 对象如果要使用某个值的时候 需要用 const vvv = toRefs(props.testprop).name
testprop: {
type: Object,
},
//接收数组
testprops: {
type: Array,
default: () => [],
},
});
//获取数组中某一个值
const vvv = toRefs(props.testprops[0]).name;


</script>


二、子组件向父组件传递事件 采用defineEmits

父组件:

<template>
<div>
<h1>这是父组件</h1>
<h2>事件传递</h2>
<HH @add="eat" />
<div style="margin: 5px; border: 2px solid gold">
子组件传值接收区: 变化数量:{{ num }}
</div>
<HH @getvale="getstr" />
<div style="margin: 5px; border: 2px solid rgb(26, 255, 186)">
子组件传值接收区: 参数内容获取:{{ valstr }}
</div>
</div>
</template>

<script setup>
import { ref } from "vue";
import HH from "@/components/HelloWorld";
//事件传递
let valstr = ref();//接收内容
let num = ref(0);//数字加减
//触发加减事件
const eat = (value) => {
num.value += value;
};
//通过子组件的事件向父组件传递参数
const getstr = (value) => {
valstr.value = value;
};
</script>

<style>
</style>

子组件:

<template>
<div>
<h1>这是子组件</h1>
<h2>自定义事件传递,子组件向父组件进行传递</h2>
<button @click="meat">点击我</button>
<button @click="getstr">点击我传递参数</button>
</div>
</template>
<script setup>
import { defineProps, defineEmits } from "vue";
const emit = defineEmits(["add"], ["getvale"]); // 自定义事件,可以自定义多个事件
const meat = () => {
// 触发自定义事件
emit("add", 1);
};
const getstr = () => {
emit("getvale", "子组件传过来的值");//第一个参数为事件名称,第二个参数为参数数据
};
</script>

标签:const,传递,let,vue3,组件,ref,defineProps
From: https://www.cnblogs.com/QsFavour/p/17544214.html

相关文章

  • sqlserver报错 "代理XP“组件已作为此服务器安全配置的一部分被关闭。系统管理员可以
    1、https://blog.csdn.net/fallingflower/article/details/128915014想为SQLServer数据库设置自动备份,点击维护计划向导的时候报错“代理XP"组件已作为此服务器安全配置的一部分被关闭。系统管理员可以使用sp_configure来启用"代理XP”。有关启用"代理XP"的详细信息,请参阅SQL......
  • Vue3+.net6.0 三 响应式基础,methods
    这里的示例都用选项式风格在Vue3中,数据是基于 JavaScriptProxy(代理) 实现响应式的。这个示例中输出是false,因为当你在赋值后再访问 this.someObj,此值已经是原来的 newObj 的一个响应式代理。需要注意的是newObj 并不会变成响应式。<scripttype="module">const......
  • 界面控件DevExtreme UI组件——增强的API功能
    虽然DevExtreme刚刚发布了v23.1,但今天我们仍然要继续总结一下之前的主要更新(v22.2)中发布的一些与DevExtremeAPI相关的重要特性。DevExtreme拥有高性能的HTML5/JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NETCore,jQuery,Knockout等)构建交互式的Web应......
  • abc074d <Floyed 消除传递边>
    D-RestoringRoadNetwork//https://atcoder.jp/contests/abc074/tasks/arc083_b//<Floyed>//1.跑一边floyed检查是否有边被更新,从而判断是否A中所有都为最短路//2.在Floyed过程中,记录被更新的边a[i][j],这些边是传递产生的边,没有必要//(想到了离散数学中......
  • 前端编程开发 --- vue3 监听属性
    监听变量的变化并触发函数 <divid="app"><pstyle="font-size:25px;">计数器:{{counter}}</p><button@click="counter++"style="font-size:25px;">点我</button>//counter++表示变量自增......
  • LOJ10010 糖果传递
    经典问题,环形均分纸牌设每个人的糖果数量为\(a[1]\)~\(a[n]\)设\(b[i]\)表示第\(i\)个人传递给第\(i+1\)个人的糖果数量(正负有意义),其中\(b[n]\)表示第\(n\)个人传递给第\(1\)个人的糖果数量根据题意不难列出\(n\)个方程,看似\(n\)个未知数,只有唯一解,但其实只有\(n-1\)个方程,因为......
  • 基于RateLimiter限流组件实践
    在系统高可用设计中,接口限流是一个非常重要环节,一方面是出于对自身服务器资源的保护,另一方面也是对依赖资源的一种保护措施。比如对于Web应用,限制单机只能处理每秒1000次的请求,超过的部分直接返回错误给客户端。虽然这种做法带来了不好的用户使用体验,但是它是在极端并发下的短......
  • vue(九)vue3新特性
    vue3六大亮点:性能比Vue2强可以将无用模块去掉,仅打包需要的组合API碎片(fragment),portal传送门(teleport),悬念(suspense)更好的TS支持暴露了自定义渲染APIsetup()在setup函数中声明对象,代替data()。ref声明简单对象,reactive声明复杂对象。<template><h3>{......
  • Vue3 的 hook函数
    Vue3的hook函数相当于vue2的mixin,不同在于hooks是函数;Vue3的hook函数可以帮助我们提高代码的复用性,让我们能在不同的组件中都利用hooks函数;其实就是代码的复用,可以用到外部的数据,生命钩子函数...,具体怎么用直接看代码,//一般都是建一个hooks文件夹,都写在里面impor......
  • vue3封装echarts组件数据更新不同步问题
    vue3封装echarts组件数据更新不同步问题背景:​ 记录一下项目中遇到的bug,在vue3+echarts环境下,为了方便使用,我将echarts封装成组件使用,使用的时候只需要把对应的值传入给chart组件就行,但是在传入真实数据的时候遇到了问题,就是传入value值与图表组件显示的数值不一致。(如图)......