VUe3组件传值

Posted 月疯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VUe3组件传值相关的知识,希望对你有一定的参考价值。

1、组件间的数据传递

默认情况下,每个组件实例都是独立的,组件间无法直接访问数据

因此需要组件间的数据传递,也称为组件间的通讯

分类:
父组件向子组件的数据传递
子组件向父组件的数据传递

a、父向子组件传递数据

父向子传递数据
步骤:
1、父组件在调用子组件时,以属性绑定的方式将要传递的数据绑定在子组件标签上
2、在子组件对象中,使用props选项声明获取的数据,进行绑定属性的拦截,即接收来自父组件的数据 

 

 

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/vue.js"></script>
	</head>
	<body>
		<div id="app">
			<p>{{ msg }}</p>
			<my-hello></my-hello>
		</div>
		<template id="hello">
			<div>
				<h3>我是父组件</h3>
				<h2>{{msg}},{{info}},{{user.username}}</h2>
			</div>
			<!-- 调用子组件 -->
			<my-world :msg="msg" :info='info' :user='user'></my-world>
		</template>
		<template id="world">
			<div>
				<h3>我是子组件</h3>
				<h2>访问父组件的变量: {{ msg }} ,{{info}},{{user.username}}</h2>
			</div>
		</template>
		<script>
			Vue.createApp({
				components:{
					'my-hello':{
						template:'#hello',
						data(){
							return{
								msg:"huitao",
								info:"浩轩",
								user:{
									id:123,
									username:'admin',
									password:'123'
								}
							}
						},
						components:{
							'my-world':{
								template:'#world',
								// 接受父组件的的传递数据
								// props:['msg','info','user']
								//取值也可以是对象
								props:{
									msg:String,
									info:{
										type:String,
										//如果没有传递值,这里会使用默认值
										default:'csdn'
									},
									user:{
										type:Object
									}
								}
							}
						}
					}
				}
			}).mount('#app')
		</script>
	</body>
</html>

b、子组件给父组件传递数据

子向父传递数据
 步骤:
 1、父组件正在调用子组件时,监听子组件出发的自定义事件,并再父组件中定义毁掉方法,用来接收数据
 
 2、在子组件中使用vm.$emit(事件名,数据)出发自定义事件

 

 

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/vue.js"></script>
	</head>
	<body>
		<div id="app">
			<p>{{ msg }}</p>
			<my-hello></my-hello>
		</div>
		<template id="hello">
			<div>
				<h3>我是父组件</h3>
				<h2>访问子组件的数据:{{ sex }}</h2>
			</div>
			<!-- 调用子组件 -->
			<!-- 绑定一个事件 -->
			<my-world @e-data="get"></my-world>
		</template>
		<template id="world">
			<div>
				<h3>我是子组件</h3>
				<h3>访问自己的数据:{{sex}}</h3>
				<button @click="send">点击将数据传递给父组件</button>
			</div>
		</template>
		<script>
			Vue.createApp({
				components:{
					'my-hello':{
						template:'#hello',
						data(){
							return{
								//子组件传递过来的数据,存储到数据仓库中
								sex:null
							}
						},
					    methods:{
							//接收子组件传递过来的数据
							get(sex){
								console.log(sex)
								this.sex=sex
							}
						},
						components:{
							'my-world':{
								template:'#world',
								// 接受父组件的的传递数据
								// props:['msg','info','user']
								//取值也可以是对象
								props:{
									
								},
								data(){
									return{
										sex:'male'
									}
								},
								methods:{
									send(){
										//使用$emit()出发一个自定义事件
										this.$emit('e-data',this.sex)
									}
								}
							}
						}
					}
				}
			}).mount('#app')
		</script>
	</body>
</html>

 

以上是关于VUe3组件传值的主要内容,如果未能解决你的问题,请参考以下文章

vue3实现父组件向子组件传值并监听props改变触发事件

Vue3组件(18)组件间传值/共享的方法的汇总

Vue3---父子组件间互相传值

Vue3 组件传值 props 和 attrs 区别

「 VUE3 + TS + Vite 」父子组件间如何通信?

Vue3之父子组件传值(setup语法糖格式)