前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vue-组件之间常用的通信方式

Vue-组件之间常用的通信方式

原创
作者头像
一只眠羊
修改2021-03-25 17:59:24
6200
修改2021-03-25 17:59:24
举报

Vue 组件之间常用的通信方式

  • props
  • 总线 eventbus
  • vuex
  • 自定义事件
    • 关系情况
      • $parent
      • $children
      • $root
      • $refs
      • provide/inject
    • 非 prop 特性
      • $attrs
      • $listener
	props 父->子传值 用属性
		parent
			<child :faData = '来自父亲'></child>
		child
			props:{
				faData:{
					type:String,
					default:""
				}
			}	
		子->父	 用自定义事件	
		child
			this.$emit('add',good)
		parent
			<child @add='cartAdd($event)'></child>
		
事件总线

任意两个组件之间值传递

	main.js 注册 
		Vue.prototype.$bus = new Vue()
	
	parent 
		<template>
			<child1 ></child1>
			<child2 ></child2>
		<template>
		
	child1
		this.$bus.$on('event-from-child2',msg=>{
				console.log(msg)
			})
	child2
		this.$bus.$emit('event-from-child2','some msg from child2')
$parent / $root
  • 发布订阅模式,事件派发和订阅的是一个人
	parent 里 child1 和child2 通信
	
		<child1></child1>
		<child2></child2>
		
		
	child1
		mounted(){
			this.$parent.$on('event-from-child1',msg=>{
				console.log(msg)
			})
		}
	
	child2
		mounted(){
			this.$parent.$emit('event-from-child2','some msg from child2')
		}
	
$children

父组件可以通过$children 访问子组件实现父子通信 $children 拿到的是一个子组件数组,不能保证子元素顺序

	parent
		<button @click='goHome'></button>
		goHome(){
			this.$children[0].eat()
		}
		
	child1
		eat(){
			console.log('马上回')
		}
	child2
$attrs / $listeners

包含了父作用域中不作为prop被识别(且获取)的特性绑定(class 和style 除外).当一个组件没有声明任何prop时,这里会包含所有父作用域的绑定(class 和 style 除外),并且可以通过v-bind = "$attrs" 传入内部组件——在创建高级别的组件时非常有用

	parent 
		<child foo='foo' @click='onClick'></child>
		onClick(){
			console.log("来自parent的回调函数处理")
		}
	child
		<p v-on='$listeners'>{{$attrs.foo}}</p>
		并未在props 中声明foo
		v-on='$listeners' 运行会被展开并监听(在parent里监听)
		
	child2
		
refs

获取子节点引用 | 访问普通的dom 元素

provide / inject 依赖注入可以跨层级传参

能够实现祖先和后代之间传值

	ancestor
		provide(){
			return {foo:'foo'}
		}
	descendant
		inject:['foo']
		可以起别名
		inject:{bar:{from:'foo'}}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Vue 组件之间常用的通信方式
    • 事件总线
      • $parent / $root
        • $children
          • $attrs / $listeners
            • refs
              • provide / inject 依赖注入可以跨层级传参
              相关产品与服务
              事件总线
              腾讯云事件总线(EventBridge)是一款安全,稳定,高效的云上事件连接器,作为流数据和事件的自动收集、处理、分发管道,通过可视化的配置,实现事件源(例如:Kafka,审计,数据库等)和目标对象(例如:CLS,SCF等)的快速连接,当前 EventBridge 已接入 100+ 云上服务,助力分布式事件驱动架构的快速构建。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档