javascript - Vue.Js,将值绑定(bind)到组件中的复选框

标签 javascript vue.js checkbox components v-model

我正在制作一个组件,它是一个复选框的包装器(我对“文本”和“数字”类型的输入做了类似的操作)但我无法让我传入的值正确绑定(bind)。

我的组件是:

<template>
  <div class="field">
    <label :for="name" class="label">
      {{ label }}
    </label>
    <div class="control">
      <input :id="name" :name="name" type="checkbox" class="control" :checked="value" v-on="listeners" />
    </div>
    <p v-show="this.hasErrors" class="help has-text-danger">
      <ul>
        <li v-for="error in errors" :key="error">{{ error }}</li>
      </ul>
    </p>
  </div>
</template>
<script>
export default {
  name: 'check-edit',
  props: {
    value: {
      type: Boolean,
      default: false
    },
    label: {
      type: String,
      default: ''
    },
    name: {
      type: String,
      default: ''
    },
    errors: {
      type: Array,
      default: () => []
    }
  },
  mounted () {
  },
  computed: {
    listeners () {
      return {
        // Pass all component listeners directly to input
        ...this.$listeners,
        // Override input listener to work with v-model
        input: event => this.$emit('input', event.target.value)
      }
    },
    hasErrors () {
      return this.errors.length > 0
    }
  },
}
</script>

我已经在全局范围内导入了它;并通过以下方式在另一个 View 中调用它:

<check-edit name="ShowInCalendar" v-model="model.ShowInCalendar" label="Show in calendar?" :errors="this.errors.ShowInCalendar"></check-edit>

我的模型在数据中,属性 ShowInCalendar 是 bool 值,在我的测试用例中为真。所以当我查看页面时,该框被选中。在 firefox 中使用 Vue 工具,我可以看到 model.ShowInCalendar 为真,并且选中了该框。但是,当我单击它时,该框保持选中状态并且 ShowInCalendar 的值更改为“on”,此后的更改不会更改 ShowInCalendar 的值。

我在这里找到了这个例子:https://jsfiddle.net/robertkern/oovb8ym7/并尝试为其实现本地数据属性,但结果不起作用。

我想要做的事情的关键是让复选框的初始检查状态成为 ShowInCalendar(或通过组件上的 v-model 绑定(bind)的任何属性)然后更新该属性(为真或 false)当复选框被选中时。

谁能给我一些建议吗?

谢谢。

最佳答案

你不应该$emit event.target.value,它是复选框的值,不是 bool 值。如果你想检测复选框是否更新(是真还是假),你应该 $emit event.target.checked 就像 fstep 说的那样。

关于javascript - Vue.Js,将值绑定(bind)到组件中的复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54935823/

相关文章:

javascript - 使用 YoutubeAPI 播放 youtube 视频直到特定时间并暂停

javascript - 如何在 visualforce 页面中维护 salesforce session ID?

javascript - 当对 Node.js 使用 child_process.exec 时,为什么输出来自 STDERR 而不是 STDOUT?

vue.js - Vue.js属性或方法 “addToCart”未在实例上定义

javascript - 我怎样才能在 vue-router 上返回/路由返回?

reactjs - 在复选框单击上 react 更新获取

javascript - Sequelize 语法错误 (N\')

vue.js - Vue + Vee Validate 3 触发手动验证

javascript - 根据 AngularJS 中的多个条件更改复选框状态

javascript - 限制复选框选择并绑定(bind)到 AngularJS 中的数组