当前位置: 首页 > article >正文

【Vue面试题】vue组件之间如何传值通信

文章目录

  • 1.父组件 传值 子组件
  • 2.子组件 传值 父组件
  • 3.兄弟组件之间的传值

1.父组件 传值 子组件

父组件:
		<Header :msg='msg'></Header>
子组件:
	props:['msg']
	或 props:{ msg:数据类型 }
  • 父组件Home.vue
<template>
	<div>
		父组件
		<Header :msg='msg'></Header>
	</div>
</template>

<script type="text/javascript">
import Header from './Header'
export default {
	data () {
		return {
			msg:'这是数据'
		}
	},
	components:{
		Header
	}
}	
</script>
  • 子组件Header.vue
<template>
	<div>
		子组件
		<hr />
		{{msg}}
	</div>
</template>

<script type="text/javascript">
export default {
	//props:['msg']
	props:{
		msg:String
	}
}
</script>

2.子组件 传值 父组件

子组件:
	this.$emit("自定义事件名称",要传的数据);
父组件:
	<Header @childInput='getVal'></Header>
	methods:{
		getVal(msg){
			//msg就是,子组件传递的数据
		}
	}
  • 父组件Home.vue
<template>
	<div>
		父  {{msgVal}}  组件
		<Header @childInput='getVal'></Header>
	</div>
</template>

<script type="text/javascript">
import Header from './Header'
export default {
	data () {
		return {
			msgVal:''
		}
	},
	components:{
		Header
	},
	methods:{
		getVal(msg){
			this.msgVal = msg;
		}
	}
}	
</script>
  • 子组件Header.vue
<template>
	<div>
		子组件
		<input type="" name="" v-model='changeVal'>
	</div>
</template>

<script type="text/javascript">
export default {
	data () {
		return {
			changeVal:''
		}
	},
	watch:{
		changeVal(){
			this.$emit("childInput",this.changeVal);
		}
	}
}
</script>

3.兄弟组件之间的传值

通过一个中转(bus)

A兄弟传值:
import bus from '@/common/bus'
bus.$emit("toFooter",this.msg);

B兄弟接收:
import bus from '@/common/bus'
bus.$on('toFooter',(data)=>{
	//data是this.msg数据
})
  • 父组件Home.vue
<template>
	<div>	
		<Header></Header>
		<Footer></Footer>
	</div>
</template>

<script type="text/javascript">
import Header from './Header'
import Footer from './Footer'
export default {
	components:{
		Header,
		Footer
	}
}	
</script>
  • 子组件Header.vue
<template>
	<div>
		header
		<button @click='goFooter'>传过去了</button>
	</div>
</template>

<script type="text/javascript">
import bus from '@/common/bus'
export default {
	data () {
		return {
			msg:"这是兄弟数据"
		}
	},
	methods:{
		goFooter(){
			bus.$emit("toFooter",this.msg);
		}
	}
}
</script>
  • 子组件Footer.vue
<template>
	<div>
		footer
		{{str}}
	</div>
</template>

<script type="text/javascript">
import bus from '@/common/bus'
export default {
	data () {
		return {
			str:''
		}
	},
	mounted(){
		bus.$on('toFooter',(data)=>{
			this.str=data;
		})
	}
}
</script>

http://www.kler.cn/news/16510.html

相关文章:

  • pytest - Getting Start
  • 8个免费使用ChatGPT网站,部分可使用gpt4
  • 如何将 github pages 迁移到 vercel 上托管
  • C# ref和out用法和区别
  • 【MySQL入门指南】主键与唯一键的使用与区别
  • 华为OD机试 - 日志首次上报最多积分(Python)
  • CTF ASCII码 密码解密题 简单
  • 《*** 法治思想学习纲要》学习辅导
  • Windows环境安装Elasticsearch和Kibana
  • 模式识别是什么意思
  • 武忠祥老师每日一题||不定积分基础训练(五)
  • RabbitMQ 发布订阅模式,routing路由模式,topic模式
  • 2023-5-2面试题学习
  • 746. 使用最小花费爬楼梯
  • Cell:癌症研究的下一个问题是什么?
  • 大学生学java编程的就业前景怎么样?我来聊聊自己的见解
  • 通过Python的PIL库给图片添加文本水印
  • 【网络协议详解】——GNS3的使用(学习笔记)
  • 计算机网络笔记:TCP协议 和UDP协议(传输层)
  • ChatGPT调教指南(中文)
  • 回到大学时光,我想对当时的自己说些什么
  • DDD系列:四、领域层设计规范
  • 存储资源调优技术——SmartThin智能精简配置技术
  • C++动态规划模板汇总大全
  • STM32物联网实战开发(4)——基本定时器
  • 32k*16 薪,3年自动化测试历经3轮面试成功拿下华为Offer....
  • 【Java笔试强训 7】
  • GEE:MODIS计算遥感指数(NDVI、BSI、NDSI、EVI、LSWI、SIPI、EBI等)
  • 吉布斯采样方法
  • 设计模式-单例模式