非父子组件间传值(一)

非父子组件间传值有两种方法,一种是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>

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

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

时间: 2024-10-07 12:13:13

非父子组件间传值(一)的相关文章

非父子组件间的传值

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

vue的父子组件间传值以及非父子间传值

Vue组件间的传值方式: 父传子 子传父 非父子间传值 1.首先父组件传值给子组件,使用bind绑定属性,然后在子组件用props接收属性值. //父组件 <template> <input type="text" /> <br/> <child :inputValue="inputValue"></child> </template> <script> import child f

非父子组件间通信

非父子组件之间的通信,可以通过一个空的 Vue 实例作为中央事件总线(事件中心),用他来触发事件和监听事件. 在这里,如果是工作中的新手看了官网的例子直接上手写,会有些发懵.这个作为事件总线空的 Vue 实例我该写哪里去?因为工作中我们的组件都是互相独立的,不可能写一起的,作用域是不同的,所以需要稍作调整 一.在 main.js 中初始化根 Vue 之前,添加一个 data 对象,内写入一个名为 Event 的空 Vue 对象,也就是中央事件总线 new Vue({ el: '#app', da

vuex非父子组件间改值

最近在用vue写单页面项目嘛,然后就有遇到这问题啦,看了很多参考,要么繁琐的一塌糊涂,要么就是传值并不是改值,下面我述说下方法,最清晰的简单demo 父子间用props 非父子间用vuex store(store/index.js) state: { x:66 }, mutations:{ add:function(state,x){//这边的x来自于a.vue state.x=1+state.x; } }......... a.vue 先引用过来store(import { store } f

vue非父子组件间通信

有时候非父子关系的组件也需要通信.在简单的场景下,使用一个空的Vue实例作为中央事件总线: 有时候非父子关系的组件也需要通信.在简单的场景下,使用一个空的 Vue 实例作为中央事件总线: var bus = new Vue() // 触发组件 A 中的事件 bus.$emit('id-selected', 1) // 在组件 B 创建的钩子中监听事件 bus.$on('id-selected', function (id) { // ... }) 在更多复杂的情况下,你应该考虑使用专门的 状态管

封装事件订阅来进行非父子组件的传值(React)

const list={} // 将事件名和事件函数装进事件池里 function $on(name,func) { if(!name || !func) return; if(!Object.keys(list).includes(name)){ list[name]=func; } } // 根据事件名称搜索事件池 找到执行 function $emit(name,...arg) { if(!name) return; if(Object.keys(list).includes(name))

Vue2.0的三种常用传值方式、父传子、子传父、非父子组件传值

Vue常用的三种传值方式有: 父传子 子传父 非父子传值 引用官网的一句话:父子组件的关系可以总结为 prop 向下传递,事件向上传递.父组件通过 prop 给子组件下发数据,子组件通过事件给父组件发送消息 1. 父组件向子组件进行传值 父组件: <template> <div> 父组件: <input type="text" v-model="name"> <!-- 引入子组件 --> <child :abc=

vue 2 使用Bus.js进行兄弟(非父子)组件通信 简单案例

vue2中废弃了$dispatch和$broadcast广播和分发事件的方法.父子组件中可以用props和$emit().如何实现非父子组件间的通信,可以通过实例一个vue实例Bus作为媒介,要相互通信的兄弟组件之中,都引入Bus,之后通过分别调用Bus事件触发和监听来实现组件之间的通信和参数传递. 首先需要在任意地方添加一个bus.js 在bus.js里面 写入下面信息 1 import Vue from 'vue' 2 export default new Vue; 在需要通信的组件都引入B

【vue】父组件主动调用子组件 /// 非父子组件传值

一  父组件主动调用子组件: 注意:在父组件使用子组件的标签上注入ref属性,例如: <div id="home"> <v-header ref="header"></v-header> <hr> 首页组件 <button @click="getChildData()">获取子组件的数据和方法</button> </div> 父组件主动获取子组件的数据和方法: 1