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 }) }