码迷,mamicode.com
首页 > 其他好文 > 详细

非父子组件间传值(一)

时间:2020-02-22 15:39:39      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:定义   数据流   eth   钩子   nbsp   pre   观察者   发布订阅   创建组   

非父子组件间传值有两种方法,一种是vuex共享数据,另一种是发布订阅模式/观察者模式/总线/Bus。这篇随笔主要总结总线机制的学习心得:

首先通过在Vue.prototype上挂载一个bus属性,指向vue实例;接下来在调用Vue或者创建组件时都会有bus属性。

		Vue.prototype.bus=new Vue()
		var Child={
			props:[‘content‘],
			data:function() {
				return {num:this.content}
			}, //因为vue是单项数据流,子组件不能改变父组件传过来的值
			template:"<div @click=‘handleClick‘>{{num}}</div>",
			methods:{
				handleClick:function(){
					this.bus.$emit(‘change‘,this.num) //传值
				} //将值传递给另一个组件,由于bus是Vue实例,所以会有$emit方法向外触发事件
			},
			mounted:function() {
				var that=this //this的指向发生了变化
				this.bus.$on(‘change‘,function(msg) {
					that.num=msg
				}) //生命钩子监听change事件
			}
		}

其次在局部子组件接收父组件的值content,在模板中添加一个click事件用于触发事件和传值(向兄弟组件)。

随后在vue的生命周期函数mounted中监听change事件,用传过来的值修改DOM内容。

vue实例的定义如下:

var app = new Vue({
			el: ‘#app‘, //接管范围
			components: {
				Child:Child
			}
		})
	<div id=‘app‘>
	<child content="dell"></child>
	<child content="Lee"></child>
	</div>

  最终实现点击一个组件,该组件的值会传给另一个组件。

 

非父子组件间传值(一)

标签:定义   数据流   eth   钩子   nbsp   pre   观察者   发布订阅   创建组   

原文地址:https://www.cnblogs.com/lora404/p/12345362.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!