在Vue中跨不同组件共享观看属性的最佳方式是什么?

时间:2018-06-01 23:08:58

标签: javascript vuejs2

我有这个被监视的属性叫做案例:

cases: {
  handler: function () {
    let vc = this
    if (vc.areCasesValid()) {
      console.log('schema-cases#handler - casesValid', vc.cases)
      vc.setApiModelFromView()
      vc.$emit('valid', vc.apiModel)
      return true
    }
    else {
      console.log('template-heuristic-cases#handler - casesInvalid', vc.cases)
      vc.$emit('invalid')
      return false
    }
  },
  deep: true
},

所有验证步骤目前都在areCasesValid函数中,但我希望提高应用程序的可用性,并且该过程涉及将不同的验证步骤放入不同的组件中。

考虑到这一点,观察cases在不同组件中经历的不同变化的最简单(不一定是最优雅)的方法是什么?

1 个答案:

答案 0 :(得分:0)

如果你想保持简单并且不想像vuex这样使用状态管理,你可以使用事件总线:

您的活动巴士:

<template>
  <div class="pleeease-click-me" @click="emitGlobalClickEvent()"></div>
</template>

<script>
// Import the EventBus we just created.
import { EventBus } from './event-bus.js';

export default {
  data() {
    return {
      clickCount: 0
    }
  },

  methods: {
    emitGlobalClickEvent() {
      this.clickCount++;
      // Send the event on a channel (i-got-clicked) with a payload (the click count.)
      EventBus.$emit('i-got-clicked', this.clickCount);
    }
  }
}
</script>

发出事件的组件:

// Import the EventBus.
import { EventBus } from './event-bus.js';

// Listen for the i-got-clicked event and its payload.
EventBus.$on('i-got-clicked', clickCount => {
  console.log(`Oh, that's nice. It's gotten ${clickCount} clicks! :)`)
});

接收活动的组件:

.Ubuntu
{
    font-family: Ubuntu;
}

可以在此处找到完整的示例和更多解释:https://alligator.io/vuejs/global-event-bus/