https://my.oschina.net/cisbest/blog/3064764
vue里的组件通信可以通过props父组件向子组件传数据,子组件通过`$emit`向父组件。兄弟组件通信一般通过父组件。如果有多个兄弟组件需要同时传数据,使用子传父,父在传子的方法就很麻烦。当然也可以直接使用vuex。不过还可以利用vux提供的 `vm.$on` 和 `vm.$emit` 这两个 `api` 进行多个不相关的组件通信。使用方法如下。当然,这里只是简单的示例只有2个组件通信,Home组件是多余的,不过为了展示效果,可以多个组件同时通信使用也是没问题的。
– 项目结构
<template>
<div>
<Son1 />
<hr />
<Son2 />
</div>
</template>
<script>
import Son1 from “./Son1.vue”;
import Son2 from “./Son2.vue”;
export default {
name: “Home”,
components: { Son1, Son2 }
};
</script>
import Vue from “vue”;
export default new Vue();
<template>
<div>
<button @click=”send”>向son2发送数据</button>
</div>
</template>
<script>
import Repeater from “./Repeater.js”;
export default {
methods: {
send() {
Repeater.$emit(“son1->son2”, “你好son2”);
}
}
};
</script>
<template>
<div>这是来自son1的数据===》{{ son1 }}</div>
</template>
<script>
import Repeater from “./Repeater.js”;
export default {
data() {
return {
son1: “”
};
},
mounted() {
Repeater.$on(“son1->son2”, msg => {
this.son1 = msg;
});
}
};
</script>
如果多个组件都需要用到的同步数据,必须挂载在同一个vue示例下,不然不同组件的数据就不会同步响应。有点单例模式的味道。