vue中的组件通信

108 阅读2分钟

在vue中很多时候我们需要从别的组件中去拿数据,此时就需要用到父子组件之间的通讯方式,或者非父子组件的通讯方式。那接下来简单的介绍一下。

一、父子组件通信之props、$emit

1.父组件的数据传递给子组件传值,子组件通过props接收

2.子组件想要修改父组件传过来的数据,因为是要遵循单向数据流的,所以是不能直接在子组件里修改父组件传过来的数据的,而是通过$emit触发事件,把想要修改的数据发送给父组件。

代码如下:

父子通讯.png

二、非父子组件通信

1、event bus 事件总线

①创建一个都能访问到的事件总线

import Vue from 'vue'
const Bus = new Vue()
export default Bus

②假设A组件是接收数据的组件,需要监听Bus实例的事件

created() {
    Bus.$on("sendMsg", (data) => {
      this.msg = data;
    });
  },

③假设B组件是发送方,需要触发Bus实例的事件

Bus.$emit('sendMsg','需要的消息')

相当于B组件是把需要发送的数据传递到了事件总线中,哪个组件需要这个数据就从时间总线的实例上拿数据

2、provide、inject

父组件通过provide提供数据,子/孙组件通过inject取值来使用

父组件provide提供数据:

provide(){
    return {
      color:this.color,
      userInfo:this.userInfo
    }
  },
  data() {
    return {
      color: "pink",
      userInfo: {
        name: "小明",
        age: 18,
      },
    };
  },

子/孙组件inject取值代码:

export default {
  inject:['color','userInfo']
};

3、vuex数据管理工具

vuex:是状态管理工具,状态就是数据,类似于事件总线一样,是可以把数据存在vuex,哪个组件需要数据就从vuex中拿,而且vuex能更好的管理数据。

像里面的state:类似于data用来存放数据的,mutations是存放操作state里的数据的方法,只有mutations里可以修改state里的数据。actions:存放一些异步操作 (也可以进行一些同步处理),getters: 存放基于state计算出来的一些值 (计算属性)

使用vuex管理数据的好处有很多,例如:
1、能够在vuex中集中管理共享的数据,易于开发和后期维护;
2、能够高效地实现组件之间的数据共享,提高开发效率;
3、而且存储在vuex的数据都是响应式的,能够实时保持数据与页面的同步...