vue通讯方式

props、refs方式(父==>子)

1.属性props

//子组件s
props:{msg;String}
//父组件
<child :msg='msg' />

2.引用refs

//父组件
<Home ref="home"></Home>
this.$refs.home.name = 'home'
//子组件
  data() {
		return {
			name: 'I am default value.'
		}
	},

emit、on自定义事件(子==>父)

//子组件
this.$emit('call')
//父组件
<child @call='call' />
methods(){
call(){}
}
//子组件
 <div @click="$emit('foo')">Survey</div>
 //父组件
 <Survey ref="Survey"></Survey>
   mounted() {
    this.$refs.Survey.$on('foo', () => {
      console.log('触发了')
    })
  },

兄弟组件:通过共同的祖辈组件

//兄弟1
<div @click="$parent.$emit('call')"></div> 
//兄弟2
  mounted() {
    this.$parent.$on('call', () => {
      console.log('兄弟组件通讯了',this.$parent)
    })
  },

provide / inject(祖先与后代之间)

提示:provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的 property 还是可响应的。

//祖先组件
  // 提供变量,供后代组件使用
  provide() {
    return {
      // 普通提供变量,不会发生响应式变化
      name: this.name,
      // 响应式提供
      getReactiveName: () => this.name
    };
  },
  data() {
    return {
      name: "张三"
    };
  },
//子孙组件
<!-- 响应式使用方式1: 直接执行提供的函数-->
直接执行提供的响应函数: {{getReactiveName()}}
  inject: [ "getReactiveName"],   

事件总线或vuex

1.事件总线:创建一个Bus类负责事件派发、监听和回调管理
在main.js中,原本应该是new一个Bus,但是由于Vue中已经有emit和on方法了,就直接new一个Vue

Vue.prototype.$bus=new Vue()

在组件中分发xx事件

this.$bus.$emit('xxx')

在某个组件中触发该方法

  this.$bus.$on('xxx', () => {
      console.log('okk')
    })

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值