中央总线

vue经典案例

  • 引入script标签使用
<div id="app">
    <c1></c1>
    <c2></c2>
</div>
var Bus = new Vue();
Vue.component('c1',{
  template:'<div>{{msg}}</div>',
  data: () => ({
    msg: 'Hello World!'
  }),
  created() {
    Bus.$on('setMsg', content => {
      this.msg = content;
    });
  }
});
Vue.component('c2',{
  template: '<button @click="sendEvent">Say Hi</button>',
  methods: {
    sendEvent() {
      Bus.$emit('setMsg', 'Hi Vue!');
    }
  }
});
var app= new Vue({
    el:'#app'
})

通过全局的空vue实例,作为一个总线,用于监听组件A和组件B(A、B为同级组件)事件,也是可以通过该总线触发A、B中使用Bus监听的事件。

  • 在脚手架中的使用
// bus.js
import Vue from 'vue'
let bus = new Vue()
export default bus
// parent component, app.vue
<template>
<div id="app">
   <v-a></v-a>
   <v-b></v-b>
</div>
</template>
<script>
import a from 'a'
import b from 'b'
export default {
  data() {
    count: 0
  },
  componens: {
    { 'v-a': a },
    { 'v-b': b }
  }
}
</script>
// A component, a.vue
<template>
<p>{{ count }}</p>
</template>
<script>
import bus from 'bus'
export default {
  data() {
    count: 0
  },
  created() {
    bus.$on(‘inscNum’, function(num = 1){
      this.count += num
    })
  }
}
</script>
// B component, b.vue
<template>
<div>
  <button @touchstart="emitCount">count</button>
</div>
</template>
<script>
import bus from 'bus'
export default {
  methods: {
    emitCount() {
      bus.$emit('inscNum', 2)
    }
  }
}
</script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 10,466评论 0 29
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,587评论 19 139
  • 序 今年大前端的概念一而再再而三的被提及,那么大前端时代究竟是什么呢?大前端这个词最早是因为在阿里内部有很多前端开...
    一缕殇流化隐半边冰霜阅读 13,843评论 19 92
  • 边拖边上—— (作者:爱看文) 一次公司电梯坏了,经理准备走楼梯上楼,这时刚好有清洁女工用拖把在拖楼梯口。 女清洁...
    范末末阅读 1,027评论 0 2
  • [苏城.周庄] 如果说有这么一座城,融山水城林园镇为一体,你会相信么? 这里的园林,早已不是一座座没有生命的砖瓦而...
    24e2f6668318阅读 2,990评论 0 1