Bin's blog Bin's blog
首页
  • Java生态

    • Java
    • JVM虚拟机
    • 数据结构与算法
  • Spring生态

    • SSM
    • SpingBoot
  • 微服务

    • Spring Cloud
    • Spring Cloud alibaba
  • 分布式

    • 消息队列
    • ELK
    • 分布式事务
    • 其他
  • 数据库

    • 关系数据库
    • NoSql
  • 项目管理

    • Git
    • Maven
  • 《HTML》
  • 《CSS》
  • 《JavaScript》
  • 《ES6》
  • 《Vue》
  • 《React》
  • 《TypeScript》
  • 《Git》
  • 《小程序》
  • Linux
  • Docker容器
  • Kubernetes
  • Nginx
  • Jenkins
  • Devops
  • 项目实战

    • 业务实战
    • 云计算产品
    • 开放对接
  • 计算机原理
  • 计算机网络
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Bin Sun

Java萌新
首页
  • Java生态

    • Java
    • JVM虚拟机
    • 数据结构与算法
  • Spring生态

    • SSM
    • SpingBoot
  • 微服务

    • Spring Cloud
    • Spring Cloud alibaba
  • 分布式

    • 消息队列
    • ELK
    • 分布式事务
    • 其他
  • 数据库

    • 关系数据库
    • NoSql
  • 项目管理

    • Git
    • Maven
  • 《HTML》
  • 《CSS》
  • 《JavaScript》
  • 《ES6》
  • 《Vue》
  • 《React》
  • 《TypeScript》
  • 《Git》
  • 《小程序》
  • Linux
  • Docker容器
  • Kubernetes
  • Nginx
  • Jenkins
  • Devops
  • 项目实战

    • 业务实战
    • 云计算产品
    • 开放对接
  • 计算机原理
  • 计算机网络
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 《HTML》笔记

  • 《CSS》笔记

  • 《JavaScript》笔记

  • 《ES6》笔记

  • 《Node》笔记

  • 《Vue》笔记

    • 基础

    • 组件

      • 使用组件的细节点
      • 父组件给子组件传值
      • 子组件派发事件和值给父组件
      • Prop 验证 与 非 Prop 的 Attribute
      • 自定义事件
      • 兄弟组件传值
      • 非父子组件传值
      • 父组件调用子组件方法并传入值
      • 插槽slot
      • 动态组件与 v-once 指令
      • vue父子组件的生命周期顺序
    • 过渡&动画

    • 可复用性&组合

    • 工具

    • 规模化

    • Vuex

    • 其他

  • 《React》笔记

  • 《TypeScript》笔记

  • 《小程序》笔记

  • 《Git》笔记

  • 前端
  • 《Vue》笔记
  • 组件
sunbin
2020-02-15

非父子组件传值

# 非父子组件间传值

当组件的嵌套多时,非父子组件间传值就显得复杂,除了使用vuex (opens new window)实现之外,还可以通过Bus(或者叫 总线/发布订阅模式/观察者模式)的方式实现非父子组件间传值。

<div id="root">
    <child1 content="组件1:点我传出值"></child1>
    <child2 content="组件2"></child2>
</div>

<script type="text/javascript">
	Vue.prototype.bus = new Vue()
	// 每个Vue原型上都会有bus属性,而且指向同一个Vue实例

	Vue.component('child1', {
		props: {
			content: String
		},
		template: '<button @click="handleClick">{{content}}</button>',
		methods: {
			handleClick(){
				this.bus.$emit('change', '我是组件1过来的~') // 触发change事件,传出值
			}
		}
	})

	Vue.component('child2', {
		data() {
			return {
				childVal: ''
			}
		},
		props: {
			content: String,
		},
		template: '<button>{{content}} + {{childVal}}</button>',
		mounted() {
			this.bus.$on('change', (msg) => { // 绑定change事件,执行函数接收值
				this.childVal = msg
			})
		}
	})

	var vm = new Vue({
		el: '#root'
	})
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

上面代码中,在Vue原型上绑定一个bus属性,指向一个Vue实例,之后每个Vue实例都会有一个bus属性。

此方法传值,不限于兄弟组件之间,其他关系组件间都适用。

See the Pen 非父子组件间传值2(Bus /总线/发布订阅模式/观察者模式) by xugaoyi (@xugaoyi) on CodePen.

编辑 (opens new window)
#Vue
上次更新: 2024/05/28, 08:37:26
兄弟组件传值
父组件调用子组件方法并传入值

← 兄弟组件传值 父组件调用子组件方法并传入值→

最近更新
01
计算机网络
05-27
02
计算机原理
05-27
03
Devops
05-27
更多文章>
Theme by Vdoing | Copyright © 2024-2024 Bin Sun | MIT License | 苏公网安备32021402002768| 苏ICP备2024096492号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式