vue 组件通信

一、传值并直接操作

问题:如果对应组件中没有该属性或事件就会报错

<!--父组件-->
<template>
    <div>
        老爸:¥{{parentNum}} <button @click="papa()">老爸给儿砸零花钱</button>
       <!--ref 获取子组件的信息    :parent 自定义属性,将父组件暴露给子组件-->
        <Child ref="son" :parent="this"/>
    </div>
</template>

<script>
import Child from './child';
export default {
    name: 'parent',
    components: { Child },
    data(){
        return{
            parentNum: 100
        }
    },
    methods: {
        papa(){
            this.$refs.son.childNum++;
        }
    }
}
</script>

<!--子组件-->
<template>
    <div>
        儿砸:¥{{childNum}} <button @click="zaza()">儿砸管老爸要零花钱</button>
    </div>
</template>

<script>
export default {
    name: 'child',
    props: ['parent'],   //接收父组件传来的值
    data(){
        return{
            childNum: 0
        }
    },
    methods: {
        zaza(){
            this.parent.parentNum--;
        }
    }
}
</script>
二、emit / on

即使对应组件中没有该属性或事件,也不会报错

//组件发送方
<Child ref="son"/>
methods: {
  change(){
    this.$refs.son.$emit('onename',7);
  }
}

//组件接收方
created(){
  this.$on('onename',num=>{
    alert(num);
  })
},
兄弟组件通信
  1. 一级一级找(孙子——老大——爷爷——老二—— 孙女),然后用父子组件通信的方式

  2. 孙子——中央事件总线——孙女

在外部新建一个js文件(Bus.js)

 import Vue from 'Vue';
 export default new Vue();

组件儿子

<div @click="send"></div>
import bus from '@/components/Bus'; // 引入中央事件总线
methods: {
  send() {
      bus.$emit('info','erzi的info'); //触发事件
  }
}

组件女儿

import bus from '@/components/Bus'; // 引入中央事件总线
methods: {
  send() {
      bus.$on('info',function(msg){
          console.log("接收到:"+msg);
      });
   }
}
组件通信

vuex

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 对于vue来说,组件之间的消息传递是非常重要的,下面是我对组件之间消息传递的各种方式的总结,总共有8种方式。 1....
    edc余悸阅读 378评论 0 3
  • 组件作为Vue中的核心概念,是值得我们深入研究的课题之一,通过研究它,我们可以理解更高深的思想,可以提升自己的开发...
    北辰_狼月阅读 788评论 2 7
  • Vue组件通信 Vue组件关系可分为三大类: 父子组件 兄弟组件 跨级组件, 相应的组件之间的通信也分类三大类: ...
    dino小恐龙阅读 1,918评论 0 2
  • 本文主要介绍关于Vue组件通信的四种方式,分别是父向子组件通信、子向父组件通信、非父子组件的EventBus通信、...
    jackie季阅读 375评论 0 5
  • 日精进打卡78天】姓名:孙维洁六项精进第364期乐2学员,403期乐2志工,456期乐2志工 一、【知~勤学】 ①...
    孙维洁阅读 261评论 0 1