javascript - 如何在 Vue 开关更改时触发事件

标签 javascript vue.js vue-component

我有一个带有 vue-switch 元素的 Vue 组件。加载组件时,必须根据数据将开关设置为 ON 或 OFF。目前这发生在“mounted()”方法中。然后,当切换开关时,它需要进行 API 调用来告知数据库新状态。这目前发生在“watch”方法中。

问题是,因为我正在“观察”开关,所以当数据在挂载上设置时,API 调用就会运行。因此,如果它设置为 ON 并且您导航到组件,mounted() 方法会将开关设置为 ON,但它还会调用切换 API 方法将其关闭。因此, View 显示它已打开,但数据显示它已关闭。

我尝试更改 API 事件,以便它发生在单击方法上,但这不起作用,因为它无法识别单击并且该函数永远不会运行。

如何才能使 API 调用仅在单击开关时进行?

HTML

<switcher size="lg" color="green" open-name="ON" close-name="OFF" v-model="toggle"></switcher>  

VUE

data: function() {
    return {
        toggle: false,
        noAvailalableMonitoring: false
    }
},
computed: {
    report() { return this.$store.getters.currentReport },
    isBeingMonitored() { return this.$store.getters.isBeingMonitored },
    availableMonitoring() { return this.$store.getters.checkAvailableMonitoring }
},
mounted() {
    this.toggle = this.isBeingMonitored;
},
watch: {
    toggle: function() {
      if(this.availableMonitoring) {
          let dto = {
            reportToken: this.report.reportToken,
            version: this.report.version
          }
          this.$store.dispatch('TOGGLE_MONITORING', dto).then(response => {
          }, error => {
          console.log("Failed.")
      }) 
    } else {
        this.toggle = false;
        this.noAvailalableMonitoring = true;
    }
  }
}

最佳答案

我建议您的模型使用 2 路计算属性 (Vue 2)。 尝试在此处更新代码,但在没有 Vuex 设置的情况下未对 obvs 进行测试。 引用请见Two-Way Computed Property

data: function(){
  return {
    noAvailableMonitoring: false
  }
},
computed: {
  report() { return this.$store.getters.currentReport },
  isBeingMonitored() { return this.$store.getters.isBeingMonitored },
  availableMonitoring() { return this.$store.getters.checkAvailableMonitoring },
  toggle: {
    get() {
      return this.$store.getters.getToggle;
    },
    set() {
      if(this.availableMonitoring) {
        let dto = {
          reportToken: this.report.reportToken,
          version: this.report.version
        }
        this.$store.dispatch('TOGGLE_MONITORING', dto).then(response => {
        }, error => {
          console.log("Failed.")
        });
      } else {
        this.$store.commit('setToggle', false);
        this.noAvailableMonitoring = true;
      }
    }
  }
}

关于javascript - 如何在 Vue 开关更改时触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46413832/

相关文章:

javascript - meteor :ReferenceError:要求未定义

javascript - 如何在 Nuxt 中使用 TinyMCE?

javascript - 如何在 vue.js 中截取特定 html div 元素的屏幕截图

vue.js - Nuxt 项目中没有布局文件夹

javascript - 动态文件夹内容的图像自动滑动器

javascript - 创建图表后需要精确设置 Highcharts 轴的最小值/最大值

javascript - 带 babel 的 Vue.js(用于 IE9 兼容性),无需节点构建步骤

javascript - Laravel Controller 将值作为 Vue prop 传递

javascript - angular.element 和 document.getElementById 有什么区别

javascript - Vue 2.X - 在组件中等待对比异步数据源的好方法