Vue:非父子组件间的传值--bus(总线/观察者模式/发布订阅模式)

非父子组件间的传值
通过在Vue.prototype上绑定bus属性,在之后所创建的vue实例都具有bus这个属性,子属性接收到数据后,通过emit向父组件传值,通过每个组件都含有的生命周期钩子mounted,创建方法通过this.bus.$on触发传值的事件并接收所传的值

<div id="app">
			<child content="Box"></child>
			<child content="Min"></child>
		</div>
		<script>
			 //在生成vue实例前,给Vue的原型上添加一个bus属性,这个属性是vue的实例,
             //之后创建的vue实例都具有bus这个属性
			Vue.prototype.bus = new Vue()
			
			Vue.component('child',{
				data: function(){
					return {
						selfContent: this.content
					}
				},
				props:['content'],
				template: '<div @click="hdclick">{{selfContent}}</div>',
				methods:{
					hdclick: function() {
						//向父组件传值,触发事件change
						this.bus.$emit('change',this.selfContent)
					}
				},
				mounted: function() {
					//因为this的指向发生了变化,不用箭头函数的话就要先把this保存起来
					var this_ = this
					//监听事件change
					this.bus.$on('change',function(msg){
						this_.selfContent = msg
					})
				}
			})
			
			var app = new Vue({
				el:"#app",
			})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值