vue项目中兄弟组件数据传递是比较经常使用的操做。比较经常使用的是vuex或事件总线vue实例来实现。本篇文章说一下vue实例bus的用法步骤。vue实例bus的用法就至关于一个中间快递小哥,会帮咱们在兄弟组件间进行数据传递。vue
<template> <div class="childOneBox"> 我是子组件一 </div> </template>
<template> <div class="childTwoBox"> 我是子组件二 </div> </template>
使用饿了么的tab栏切换组件看着更加明显一些vuex
<template> <div id="app"> <el-tabs v-model="activeName" @tab-click="handleClick"> <el-tab-pane label="卡片一" name="cardOne"> <!-- 兄弟组件一 --> <child-one></child-one> </el-tab-pane> <el-tab-pane label="卡片二" name="cardTwo"> <!-- 兄弟组件二 --> <child-two></child-two> </el-tab-pane> </el-tabs> </div> </template> <script> // 引入子组件并注册使用 import childOne from "./views/childOne"; import childTwo from "./views/childTwo"; export default { components: { childOne, childTwo, }, data() { return { activeName: "cardOne", }; }, methods: { handleClick(tab, event) { // console.log(tab, event); }, }, }; </script>
项目结构图:app
注意A兄弟组件要传数据到B兄弟组件,若使用vue实例,那么两个组件都须要引入bus实例this
若是以为新建一个文件夹用来存放bus文件有点麻烦,也能够把实例的vue对象放在Vue的原型上面,放在原型上面的话,每一个.vue文件均可以访问到。因此上述的写法就会发生变化一下:spa
// 在main.js中把实例化的vue对象放在vue的原型上 Vue.prototype.$bus = new Vue() // 子组件一 methods:{ sendData(){ this.$bus.$emit("send",this.childOneData) } } // 子组件二 created(){ this.$bus.$on("send",(payload)=>{ console.log("来自兄弟组件的数据",payload) this.msg = payload }) }