eventBus

先在main.js中指定eventBus:
Vue.prototype.$EventBus = new Vue()
相当于挂载一个Vue的实例。
下面开始尝试使用:
先编写comA用于触发一个事件在父组件中响应减操作并接受B组件的传过来的数据最后console.log出来:

comA

  1. <template>
  2. <button @click="increment()">+ 加并接受另一个组件的值!</button>
  3. </template>
  4. <script>
  5. export default {
  6. name: 'IncrementCount',
  7. data() {
  8. return {
  9. num: 1,
  10. deg: 1
  11. };
  12. },
  13. methods: {
  14. increment() {
  15. this.$EventBus.$emit("incremented",{
  16. num: this.num,
  17. deg: this.deg
  18. });
  19. }
  20. },
  21. mounted() {
  22. // 这是响应change事件
  23. this.$EventBus.$on("change", test => {
  24. console.log(test)
  25. })
  26. }
  27. }
  28. </script>

然后我们编写comB,用于触发一个事件在父组件中响应加操作并传递值到comA:

comB

  1. <template>
  2. <button @click="decrease()"> -减 </button>
  3. </template>
  4. <script>
  5. export default {
  6. name: 'DecreaseCount',
  7. data() {
  8. return {
  9. num: 1,
  10. deg: 1,
  11. show_data: 1000
  12. }
  13. },
  14. methods: {
  15. decrease() {
  16. this.$EventBus.$emit("decreased", {
  17. num: this.num,
  18. deg: this.deg,
  19. show_data: this.show_data // show_data就是要传递到组件A的值
  20. })
  21. }
  22. }
  23. }
  24. </script>

最后我们编写一个父组件,将A、B组件组合在一起:

comC(A和B的parent)

  1. <template>
  2. <div id="root">
  3. <IncrementCount />
  4. <DecreaseCount />
  5. <div>{{ degValue }}</div>
  6. <div>{{ fontCount }}</div>
  7. <div>{{ backCount }}</div>
  8. </div>
  9. </template>
  10. <script>
  11. import IncrementCount from '../components/add_event_bus';
  12. import DecreaseCount from '../components/decrease_event_bus';
  13. export default {
  14. name: 'App',
  15. components: {
  16. IncrementCount,
  17. DecreaseCount
  18. },
  19. data() {
  20. return {
  21. degValue: 0,
  22. fontCount: 0,
  23. backCount: 0
  24. };
  25. },
  26. mounted() {
  27. // 接收A组件的incremented事件
  28. this.$EventBus.$on("incremented", ({num, deg}) => {
  29. this.fontCount += num
  30. this.$nextTick(() => {
  31. this.backCount += num
  32. this.degValue += deg
  33. })
  34. })
  35. // 接收B组件的decreased事件
  36. this.$EventBus.$on("decreased", ({num, deg}) => {
  37. this.fontCount -= num
  38. this.$nextTick(() => {
  39. this.backCount -= num
  40. this.degValue -= deg
  41. // 这里触发change事件
  42. this.$EventBus.$emit("change", 1000)
  43. })
  44. })
  45. }
  46. }
  47. </script>