1:在项目中创建一个单独的eventBus.js文件
// eventBus.js
import Vue from 'vue'
export default new Vue;
2:在父组件注册并引入两个子组件
// transfer.vue(父组件)
<template>
<div class="container layer_nobetween">
<nav-tab />
<trans-chart />
</div>
</template>
<script>
import NavTab from "./model/nav";
import TransChart from "./model/TransChart";
export default {
components: {
NavTab,
TransChart,
},
data() {
return {};
},
methods: {},
};
</script>
3:分别在两个子组件引入eventBus.js
// TransChart.vue (子组件)
<template>
<div class="right layer_star flex_warp">
<div
class="right_one layer_star"
v-for="(item, index) in rightArr"
:key="index"
>
<div class="right_icon" @click="choose(item)">
<img :src="item.choose ? chooseImg : checkImg" alt="" />
</div>
<div class="right_name">{{ item.name }}</div>
</div>
</div>
</template>
<script>
import bus from "../../utils/eventBus";
export default {
name: "trainCity",
data() {
return {
chooseImg: require("@/assets/choose.png"),
checkImg: require("@/assets/check.png"),
leftArr: [],
rightArr: [
{ name: "张三", key: 1, choose: false },
{ name: "李四", key: 2, choose: false },
{ name: "王五", key: 3, choose: false },
{ name: "赵麻子", key: 4, choose: false },
],
};
},
methods: {
// 选中右侧
choose(item) {
let t = this;
let leftArr = t.leftArr;
let rightArr = t.rightArr;
let key = item.key;
for (var i = 0; i < rightArr.length; i++) {
if (key == rightArr[i].key) {
if (rightArr[i].choose) {
rightArr[i].choose = false;
for (var k = 0; k < leftArr.length; k++) {
if (key == leftArr[k].key) {
leftArr.splice(k, 1);
}
}
} else {
rightArr[i].choose = true;
leftArr.push(rightArr[i]);
}
}
}
t.rightArr = rightArr;
t.leftArr = leftArr;
bus.$emit("sendByBus", t.leftArr);
},
},
};
</script>
// nav.vue(子组件)
<template>
<div class="left flex_star">
<div class="left_one" v-for="(item, index) in leftArr" :key="index">
{{ item.name }}
</div>
</div>
</template>
<script>
import bus from "../../utils/eventBus";
export default {
name: "trainCity",
data() {
return {
leftArr: [],
};
},
methods: {},
mounted() {
bus.$on("sendByBus", (data) => {
console.log(data);
this.leftArr = data;
});
},
};
</script>
4:TransChart向nav传值(传值使用$emit)
bus.$emit("sendByBus", t.leftArr);
5:nav接到TransChart的值(接收值使用$on)
mounted() {
bus.$on("sendByBus", (data) => {
console.log(data);
this.leftArr = data;
});
},