【问题标题】:Vuejs need to watch bool multiple timeVuejs 需要多次观看 bool
【发布时间】:2018-09-04 14:38:40
【问题描述】:

我正在使用 VueJs,我需要多次观察一个布尔值,当它为真时,执行一个动作。我发现当当前值更改为相同值(https://github.com/vuejs/vue/issues/1302)时,手表不会触发。

目前,我只是在每个可以更改值的操作之前将 bool 设置为 false,并且在我的手表中,我有一个 if 来检查 bool 是否为真。有人知道更好的方法吗?

watch: {
  '$store.state.recommandationModule.recommandationSetCorrectly': function (val) {
    if (val) {
      // Do action
    }
  }
}

【问题讨论】:

  • 听起来您发生了一个设置布尔值的事件,您在此处的操作也应该监听该事件。
  • @RoyJ 我有多个事件,我将布尔值更改为真或假。如果 bool 更改为他之前的状态,手表不会触发,但即使 bool 为真并且我再次将其更改为 true,我也需要执行操作。

标签: javascript vue.js


【解决方案1】:

当您为反应项分配与它已有的相同值时,不会发生任何事件。你需要做一些事情来完成这些任务。

您可以为此使用settable computed。每当您尝试为变量分配值时,都会调用它。您只需要确保设置您的计算变量,而不是它所基于的存储变量。

new Vue({
  el: '#app',
  data: {
    storeStateMock: true,
    trueCount: 0,
    changeCount: 0
  },
  computed: {
    recommendationSetCorrectly: {
      get() { return this.storeStateMock; },
      set(v) {
        if (v) { ++this.trueCount; }
        this.storeStateMock = v;
      }
    }
  },
  watch: {
    recommendationSetCorrectly() {
      ++this.changeCount;
    }
  },
  created() {
    setInterval(() => {
      this.recommendationSetCorrectly = Math.random() > 0.5;
    }, 1200);
  }
});
<script src="//unpkg.com/vue@latest/dist/vue.js"></script>
<div id="app">
  {{ recommendationSetCorrectly }} {{ trueCount }} {{ changeCount }}
</div>

您还可以将trueCount 项目添加到您的$store,并在设置布尔值的突变中增加它。那你就可以看trueCount了。

【讨论】:

  • 计数可以工作,但我不知道这是否是最好的主意,是否干净。另外,bool 需要在 store 中,因为它可以在多个 Vue 中使用。
猜你喜欢
  • 2021-12-04
  • 2012-10-04
  • 1970-01-01
  • 2018-12-19
  • 2019-02-28
  • 2019-02-20
  • 1970-01-01
  • 2020-10-07
  • 1970-01-01
相关资源
最近更新 更多