Vue.js 非父子组件之间的通讯

Vue.js 非父子组件之间的通讯

在一些非父子组件会经常用到互相之间的通讯功能,Vue.js 有 vuex 状态管理模式,但是非大型的项目也就不需要使用它,这会增加其难度的。官网介绍的一种方式是使用一个空 Vue 实例作为中央事件总线。
那么在 vue-cli 项目中可以这样使用:

main.js

// main.js 文件
import Vue from 'vue'
...
Vue.prototype.bus = new Vue({})

App.vue

<template>
  <c1></c1>
  <c2></c2>
</template>
<script>
  import c1 from '@/components/c1'
  import c2 from '@/components/c2'
  ...
  components: {
    c1,
    c2
  }
  ...
</script>

c1.vue

<template>
  <div id="app">
    C1计数:{{fooCount}}
    <br>
    <button @click="countC2">点击会修改C2的计数</button>
  </div>
</template>

<script>
  export default {
    data () {
      return {
        fooCount: 0
      }
    },
    mounted () {
      this.bus.$on('countC1', (num) => {
        this.fooCount += num
      })
    },
    methods: {
      countC2 () {
        this.bus.$emit('countC2')
      }
    }
  }
</script>

<style lang="sass">
  
</style>

c2.vue

<template>
  <div id="app">
    C2计数:{{barCount}}
    <br>
    <button @click="countC1">点击会修改C1的计数</button>
  </div>
</template>

<script>
  export default {
    data () {
      return {
        barCount: 0
      }
    },
    mounted () {
      this.bus.$on('countC2', () => {
        this.barCount++
      })
    },
    methods: {
      countC1 () {
        this.bus.$emit('countC1', 91)
      }
    }
  }
</script>

<style lang="sass">
  
</style>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 有一种人,他们孤独地徘徊在零度边缘,等待着某份温暖能够仁慈地降临,向他们施以援手。他们就像挣扎在零度的寒流里,多一...
    熊猫微刊阅读 488评论 0 3
  • 我到过欧美的很多城市,美国的城市乏善可陈,欧洲的城市则很耐看。比方说,走到罗马城的街头,古罗马时期的竞技...
    查令十字街捌拾肆號阅读 480评论 1 2
  • 今天感到胃上部到心口中间这一块特别哽堵并发射到喉咙,这个部位还往下胃部有重地撕扯疼,还有胀,一会好像通了一点有点往...
    张德芬幸福驿站咸阳阅读 260评论 0 0