vue的父子组件以及非父子组件之间的通信方式

Posted miaomiaoblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue的父子组件以及非父子组件之间的通信方式相关的知识,希望对你有一定的参考价值。

Vue组件通信

父传子  prop

自定义属性,将父亲的数据传给儿子
1. 在组件标签上使用自定属性
2. 在组件内部通过props来接收自定义属性
3. 子组件接收后既可以在组件里直接使用,不过只能用不能改
<wiz_code_mirror>
//父组件
<body>
  <div id=‘app1‘>  
    <!-- 在tp1组件标签上使用 xixi自定义属性 -->
    <tp1 :xixi=‘change‘></tp1>
  </div> 
<script>
let vm1 = new Vue({
  el:‘#app1‘,
  data:{
    change:‘nihao‘
  }
})
</script>
<wiz_code_mirror>
//子组件
  <template id=‘tp1‘>
    <div class=‘tp1‘>
      这里是组件
      {{xixi}}
    </div>
  </template>
<script>
Vue.component(‘tp1‘,{
  template:‘#tp1‘,
  props:[‘xixi‘]
})
</script>
 

子传父  $emit

$emit 可以触发绑定在组件身上自定义事件
1.在父组件中的子组件标签绑定一个自定义事件
 <son @custom=‘add‘></son>
2.在子组件的内部 通过$emit 触发这个自定事件
<wiz_code_mirror>
<body>
  <div id=‘app1‘> 
  <!-- 绑定在son身上的自定义事件 事件名叫 custom 处理函数叫add -->
  <son @hehe=‘change‘></son>
//这里是子组件
<template id=‘tp1‘>
  <div>
    <button @click=‘sonClick‘> 这里是子组件的按钮</button>
  </div>
</template>
</body>
<script>
Vue.component(‘son‘,{
  template:‘#tp1‘,
  methods: {
    sonClick(){
      console.log(‘子组件的处理方法‘) 
      // 通过emit方法触发自定义事件 参数1 自定义事件名
      this.$emit(‘hehe‘,666)
    }
  },
})
//实例:
let vm1 = new Vue({
  el:‘#app1‘,
  methods: {
    change(num){
      alert(‘点到我了‘+num)
    }
  },
})
 
 

兄弟通信

  • 状态提升 适合于‘近亲’
  • 事件总线( 观察者模式、事件抛发机制、天使实例 )
原理:
1. 创建一个空实例 作为桥梁
2. 通过 $on 在空实例上注册事件
3. 在任何地方 只要能获取到空实例 那就可以通过 $emit 方法触发事件
步骤:
2个组件 兄弟关系  1个的按钮控制另一个div的显示隐藏
1. 组件二:
找到发生改变的组件 添加改变事件和数据关联
组件里的数据只有自己的方法可以修改
2. 组件1:通过button来进行控制

以上是关于vue的父子组件以及非父子组件之间的通信方式的主要内容,如果未能解决你的问题,请参考以下文章

vue2.0父子组件以及非父子组件如何通信

vue2.0父子组件以及非父子组件如何通信

vue2.0父子组件以及非父子组件如何通信

vue父子组件之间的通信

vue2.0父子组件以及非父子组件通信

vue父子组件之间的通信