IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> vue:组件之间的通信 -> 正文阅读

[JavaScript知识库]vue:组件之间的通信

vue:组件之间的通信

1、子组件获取父组件数据

在vue中,组件和组件之间是可以相互通信的,包括父子组件间,兄弟组件间都可以互相通信。

1.子组件获取父组件

? 在vue中,组件实例的作用域是孤立的,默认情况下,父子组件的数据是不能共享的,也就是说,子组件是不能直接访问父组件的数据的。为此,vue给我们提供了一个数据传递的选项prop,用来将父组件的数据传递给子组件。具体使用如下:

父组件给子组件传值的步骤:
1、在js代码中创建子组件对象时,使用props来设置父组件调用子组件时的属性名(数组);
2、调用子组件标签时,通过属性向子组件传值
3、在子组件的视图中获取父组件传过来的值

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>vue_18</title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
	</head>
	<body>
		<div id="app">
			<input type="text" v-model="age"/>
			<comp01 :age='age'></comp01>
		</div>
		
		<template id = 'comp01'>
			<div>
				<h1>{{msg}}</h1>
				<h2>{{age}}</h2>
				<input type="text" v-model="uname"/>
				<br>
				<input type="text" v-model="realname"/>
				<!-- 2.通过属性向子组件传值 -->
				<comp02 :uname='uname' pass='123' :realname='realname'></comp02>
			</div>	
		</template>
		<template id = 'comp02'>
			<div>
				<h3>{{msg}}</h3>
				<!-- 3.获取父组件传过来的值 -->
				uname: {{uname}} ,pass:{{pass}},realname:{{realname}}
			</div>	
		</template>
<script type="text/javascript">
	let comp02 = {
		template: "#comp02",
		data(){
			return {
				msg:'子组件'
			}
		},
		//1.使用props来设置父组件来调用子组件时的属性名
		props:['uname','pass','realname']
	}
	let comp01 = {
		template: "#comp01",
		data(){
			return {
				msg:'父组件',
				uname: 'tom2',
				realname:'老李',
				age:18
			}
		},
		components:{
			comp02:comp02 //相当于 comp02 : comp02
		},
		props:['age']
	}
	let vm = new Vue({
		el: '#app',
		data:{
			age:11
		},
		components:{  //在vm对象中注册组件
			comp01
		}
	})
</script>
	</body>
</html>

在这里插入图片描述

在上面这个例子中 子组件中通过props:[‘uname’,‘pass’,‘realname’]来声明接受父组件向子组件传递的载体,也就是uname,pass,realname这三个属性。

2、父组件获取子组件数据

父组件想要获取子组件的数据时,需要子组件通过emit主动将自己的数据发送给父组件

子组件给父组件传值的步骤:
1、在子组件的模板代码中触发向父组件传值的事件
2、在子组件的对象的函数中,通过$emit函数向父组件发送数据
3、在父组件调用子组件标签时,绑定子组件提供的 fromchild事件,设置接收数据的函数
4、在父组件对象中创建函数,通过参数接收子组件传来的值

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>vue_19_子组件给父组件传值</title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
	</head>
	<body>
		<div id="app">
			<comp01></comp01>
		</div>
		
		<template id = 'comp01'>
			<div>
				<h1>{{msg}}</h1>
				<h3>子组件组件传来的值:{{user.uname}}</h3>
				
				<!-- 3.绑定子组件提供的fromChild事件,设置接受数据的函数 -->
				<comp02 @fromchild='get' ></comp02>
			</div>	
		</template>
		<template id = 'comp02'>
			<div>
				<h3>{{msg}}</h3>
				<input type="text" v-model="user.uname" />
				<!-- 1、触发向父组件传值的事件 -->
				<button @click="doSend()">向父组件传值</button>
			</div>	
		</template>
<script type="text/javascript">
	let comp02 = {
		template: "#comp02",
		data(){
			return {
				msg:'子组件',
				user:{
					uname:'jerry',
					pass:123
				}
			}
		},
		methods:{
			doSend(){
				//2.通过$emit函数向父组件发送数据
				//参数1表示调用子组件标签的事件名,
				//参数2表示要发送的数据
				this.$emit('fromchild',this.user);
			}
		}
	}
	let comp01 = {
		template: "#comp01",
		data(){
			return {
				msg:'父组件',	
				user:{		
				}
			}
		},
		components:{
			comp02:comp02 //相当于 comp02 : comp02
		},
		methods:{
			//4.创建函数。通过参数接受子组件传来的值
			get(a){
				this.user = a;
			}
		}
	}
	let vm = new Vue({
		el: '#app',
		components:{  //在vm对象中注册组件
			comp01
		}
	})
</script>
	</body>
</html>

在这里插入图片描述
首先,我们需要在子组件中触发一个主动发送数据的事件,在上面这个例子中用的是<button @click=“doSend()”>向父组件传值定义了一个doSend()事件
其次就是要在点击事件中使用emit方法,这个emit接受两个参数,传递数据的事件和需要传递的数据,这个传递数据的事件也是自定义的;
然后在父组件中引用子组件,并在引用的子组件中使用on监听上一步传递数据的事件,也就是上面这个例子中的fromchild
最后就是在父组件中使用这个事件,事件带有一个参数就是从子组件中发送过来的数据。
在上面这个例子中子组件向父组件传了一个user对象。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-24 15:27:49  更:2021-08-24 15:28:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:15:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码