美文网首页
组件之间的通信

组件之间的通信

作者: 苦咖啡Li | 来源:发表于2018-07-29 14:56 被阅读0次

1、父子组件通信

1.1父组件到子组件

方式:通过 props 属性传递数据

注意:子组件无法直接使用父组件的数据

//=============  父组件  =================

<aaa :money="bar"></aaa> 

important aaa from '......'
var vm = new Vue({
  el: '#app',
  data: { 
    bar:102
  },
})

//==============  子组件  ===============

<template>
    <div>
      <p>默认数据-----{{ money }}</p>
    </div>
</template>

<script>
    var vm = new Vue({
      el: '#app',
      props:[ "money" ],
      data: { 
        return{
            myMoney:this.money
        }
      },
    })
</script>

1.2子组件到父组件

方式:父组件给子组件定义一个函数,由子组件调用这个函数

说明:借用Vue中的自定义事件 ( :cunstomFn = "fn" )

注意$emit 触发时间

//============  父组件  ================
<hello @parentFn='parentFn'   ></hello>
<script>
new Vue({
    data:{
        return {
            message:''
        }
    },
    methond:{
        // 父组件:提供方法
        parentFn( data ){
            this.message = data.message
        }
    }
})
</script>

//============  子组件  ====================
<template>
    <button @click="iclick">按钮</button>
</template>
<script>
new Vue({
    data:{
        return{
            message : '我是子组件传递给父组件的值'
        }
    },
    methonds:{
        iclick(){
            let data = {
                message : this.message
            }
            this.$emit( 'parentFn' , data )
        }
    }
})
</script>

总结:

1.2.1 父 ===> 子

原理:通过 props 来实现

步骤:1、在父组件标签中将要传递的数据作为组件标签的属性,<bbb :data="data"></bbb>

2、在子组件内部js中指定 props:["data"]

1.2.2 子 ===> 父

原理:通过 $emit 来实现

步骤:1、父组件提供一个方法,ievent( data ){ .... }

2、将这个方法传递给子组件,<ccc @ievent="ievent" ></ccc>

3、由子组件调用这个方法,需要传递的数据作为参数,iclick(){ this.$emit( 'ievent' , data )}

2、非父子组件通讯

在简单的场景下,可以使用一个 空的Vue实例 作为 事件总线

原理:创建一个公共的 事件总线 作为一个中转站,通过 $on 接收事件,$emit 触发事件

//==========   创建一个公共的事件总线  Hub  (main.js)===========
let Hub = new Vue();

//============   组件 A  (触发)================
<div @click="eve"></div>

methods: {
  eve() {
    Hub.$emit('change','hehe'); //Hub触发事件
  }
}

//============   组件 B   (接收) ====================

<div></div>

created() {
  Hub.$on('change', () => { //Hub接收事件
    this.msg = 'hehe';
  });
}

总结:

步骤:2.1 组件A中通过 Hub.$emit( 'fn', 数据1, 数据2 )

2.2 组件B中通过 Hub.$on( 'fn' , function( data1, data2 ){...} )

注意:先绑定事件,再触发事件,否则数据无法传递,但是不会报错

相关文章

  • React的组件通信

    组件之间进行通信的情况: 父组件向子组件通信 子组件向父组件通信 兄弟组件之间通信 发布者-订阅者模式 一、父组件...

  • 老生常谈——vue组件之间通信

    老生常谈的组件之间通信 vue组件之间的通信细分为三种情况:兄弟组件之间的通信,父组件向子组件传递数据,子组件向父...

  • [Vue]组件之间如何通信?

    组件通信可以大致分为两种情况,父子组件之间的通信和非父子组件之间的通信,下面来分别介绍 一、父子组件之间的通信 1...

  • Vue.js--组件通信

    vue组件之间的通信包括三种: 1.父组件向子组件通信 2.子组件向父组件通信 3.同级组件之间的通信 首先,看一...

  • react之组件通信

    需要组件之进行通信的几种情况: 父组件向子组件通信 子组件向父组件通信 跨级组件通信 没有嵌套关系组件之间的通信 ...

  • React组件通信的几种方式

    需要组件之进行通信的几种情况 父组件向子组件通信 子组件向父组件通信 跨级组件通信 没有嵌套关系组件之间的通信 1...

  • React中组件通信的几种方式

    需要组件之进行通信的几种情况 父组件向子组件通信 子组件向父组件通信 跨级组件通信 没有嵌套关系组件之间的通信 1...

  • React中组件通信

    需要组件之进行通信的几种情况 父组件向子组件通信 子组件向父组件通信 跨级组件通信 没有嵌套关系组件之间的通信 1...

  • Vue3组件化(二):非父子组件的通信、插槽Slot

    非父子组件的通信 在开发中,我们构建了组件树之后,除了父子组件之间的通信之外,还会有非父子组件之间的通信。这里我们...

  • Vue 组件 / 通信

    子组件=》父组件 vue的组件之间的通信类似angular的父子层级之间通信,父组件获取子组件数据步骤大概如下: ...

网友评论

      本文标题:组件之间的通信

      本文链接:https://www.haomeiwen.com/subject/ojofpftx.html