Vue 父子組件和兄弟組件通信

組件通信總結

父傳子:props: [args]
子傳父:this.$emit(event, args)
兄傳弟:vm.$on(event, function (data) {}

Foo.vue 父組件

<template>
  <div class="tmpl">
    <h1>父子組件與兄弟組件通信</h1>
    <h3>子組件通信為 {{childMsg}}</h3>
    <my-bar :message="parentMsg" v-on:showMsg="getMsg"></my-bar>
    <my-baz></my-baz>
  </div>
</template>

<script>
import MyBar from '@/components/Foo/Bar.vue'
import MyBaz from '@/components/Foo/Baz.vue'
export default {
  name: 'Foo',
  components: {
    MyBar, MyBaz
  },
  data () {
    return {
      parentMsg: 'abc123',
      childMsg: ''
    }
  },
  methods: {
    getMsg: function (data) {
      this.childMsg = data
    }
  }
}
</script>

<style scoped>
h1 {
  font-weight: normal;
}
</style>

Bar.vue 子組件(兄)

<template>
  <div class="tmpl">
    <h1>父組件傳值為 {{message}}</h1>
    <input type="text" placeholder="請輸入子組件內(nèi)容" v-model="param">
    <button @click="sendParam">通信父組件</button>
  </div>
</template>

<script>
import EventHandler from '@/assets/js/EventHandler.js'
export default {
  name: 'Bar',
  props: {
    message: {
      type: String,
      default: '默認為空'
    }
  },
  data () {
    return {
      param: ''
    }
  },
  methods: {
    sendParam: function () {
      var param = this.param
      this.$emit('showMsg', param)
      EventHandler.$emit('showMsg', param)
    }
  }
}
</script>

<style scoped>
h1 {
  font-weight: normal;
}
.tmpl {
  border: 1px solid #333;
  padding: 30px;
}
</style>

Baz.vue 子組件(弟)

<template>
  <div class="tmpl">
    <h1>Baz</h1>
    <h1>兄弟組件通信為{{brotherMsg}}</h1>
  </div>
</template>

<script>
import EventHandler from '@/assets/js/EventHandler.js'
export default {
  name: 'Baz',
  mounted () {
    var that = this
    EventHandler.$on('showMsg', function (data) {
      that.brotherMsg = data
    })
  },
  data () {
    return {
      brotherMsg: ''
    }
  }
}
</script>

<style scoped>
h1 {
  font-weight: normal;
}
</style>

EventHandler.js 用于兄弟組件之間傳遞事件

import Vue from 'Vue'
export default new Vue()
image.png

點擊按鈕后通信

謝謝閱讀,有幫助的點個?!

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容