为什么我计算的 属性 没有在 Vue 中更新?

Why is my computed property doesn't get updated in Vue?

这应该很容易,但我找不到我做错了什么。只有在选中所有复选框时才应启用该按钮,但不会传播更改。事实上 buttonDisabled 只在开始时被调用一次。

希望得到答案和一些调试技巧。

<template>
  <f7-page name="home">
    <f7-list inset>
      <f7-list-item title="I've got my headphones on">
          <f7-checkbox slot="media" :checked="checked.headphones"></f7-checkbox>
      </f7-list-item>
      <f7-list-item title="I have 10 minutes to myself">
          <f7-checkbox slot="media" :checked="checked.time"></f7-checkbox>
      </f7-list-item>
      <f7-list-item title="I'm in a quiet space">
          <f7-checkbox slot="media" :checked="checked.quiet"></f7-checkbox>
      </f7-list-item>
    </f7-list>
    <f7-list inset>
        <f7-button :disabled="buttonDisabled" fill round>Let's get started</f7-button>
    </f7-list>
  </f7-page>
</template>

<script>
  export default {
    data: function() {
      return {
        checked: {
          headphones: false,
          time: false,
          quiet: false,
        }
      }
    },
    computed: {
      buttonDisabled() {
        return ! ( this.checked.headphones && this.checked.time && this.checked.quiet );
      }
    }
  }
</script>

您需要使用@change 来更新每个复选框的模型。

https://framework7.io/vue/checkbox.html

<f7-checkbox slot="media" :checked="checked.headphones" @change="checked.headphones = $event.target.checked"></f7-checkbox>

这是由于 vue 的反应性警告:https://vuejs.org/v2/guide/reactivity.html

您正在更新对象的 属性,计算属性无法注册更改 - 作为解决方案,请尝试以这种方式处理 change 事件:@change="checked = {...checked}