中央总线

2017-08-30  本文已影响0人  issac_宝华

vue经典案例

<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>
上一篇下一篇

猜你喜欢

热点阅读