14 Vue 非父子组件间的传值 bus/总线/发布订阅模式/观察者模式 使用和总结

一、父子组件之间的传递数据如下图

 二、跨级组件间的传递就不行了 。 在叶子之间传递数据也是会出现问题如下图

 这时就需要引入一起工具或者设计模式就可以解决这个问题了。

我们上节讲到了父子组件的传递,大致是这样的代码如下:

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title>非父子组件间传值(bus/总线/发布订阅模式/观察者模式)</title>
		<script src="../vue.js"></script>
		
	</head>
	<body>
		<div id="app">
			<child content="dell"></child>
			<child content="lee"></child>
		</div>

		<script type="text/javascript">
			Vue.component('child',{
				props:{
					content:String
				},
				template:'<div>{{content}}</div>'

			})
			var vm = new Vue({
				el: "#app"

			})
		</script>

	</body>
</html>

 二 、 我们实现一个功能,在点击 Dell  时,lee 也变成  dell  。当点击  lee 时,dell  变成 lee

这时,就是兄弟之间的组件传值的方式了。上代码 :

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title>非父子组件间传值(bus/总线/发布订阅模式/观察者模式)</title>
		<script src="../vue.js"></script>
		
	</head>
	<body>
		<div id="app">
			<child content="dell"></child>
			<child content="lee"></child>
		</div>

		<script type="text/javascript">
			Vue.prototype.bus = new Vue()
			Vue.component('child',{
				data:function() {
					return {
						//接过 父组件传递过来的content属性
						selfContent: this.content
					}
				},
				props:{
					content:String
				},
				template:'<div @click="handleDivClick">{{selfContent}}</div>',
				methods: {
					handleDivClick:function() {
						// alert("handleDivClick")
						//向外触发change事件
						this.bus.$emit('change',this.selfContent)
					}
				},
				//组件生命周期的钩子mounted函数
				mounted: function() {
					var this_ = this;
					//监听bus 的 change事件,发生监听事件就执行以下函数,兄弟组件之间的传递值
					this.bus.$on('change',function(msg) {
						// alert(msg)
						//改变兄弟组件之间的值传递
						this_.selfContent = msg
					})
				}

			})
			var vm = new Vue({
				el: "#app"

			})
		</script>

	</body>
</html>

点击dell后,变成了

这样就实现了,兄弟组件之间的数据传递。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值