使用Vue.js设置复选框

Lov*_*ock 23 javascript vue.js

我一直在谷歌搜索和玩我知道的每一个组合,但我不能让我的复选框初始化为已检查.

例:

<ul class="object administrator-checkbox-list">
    <li v-for="module in modules">
        <label v-bind:for="module.id">
            <input type="checkbox" v-model="form.modules" v-bind:value="module.id" v-bind:id="module.id">
            <span>@{{ module.name }}</span>
        </label>
    </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

模块数据的示例:

[
    {
        "id": 1,
        "name": "Business",
        "checked": true
    },
    {
        "id": 2,
        "name": "Business 2",
        "checked": false
    },
]
Run Code Online (Sandbox Code Playgroud)

如何初始设置复选框的选中状态?

ase*_*hle 35

要设置复选框的值,需要将v模型绑定到值.如果值为真,则将选中该复选框.在这种情况下,您正在迭代modules并且每个module都有一个checked属性.

以下代码将复选框与该属性绑定:

<input type="checkbox" v-model="module.checked" v-bind:id="module.id">
Run Code Online (Sandbox Code Playgroud)

请注意我删除了v-bind:value="module.id".你不应该在同一个元素上使用v-modelv-bind:value.从vue 文档:

<input v-model="something">
Run Code Online (Sandbox Code Playgroud)

只是语法糖:

<input v-bind:value="something" v-on:input="something = $event.target.value">
Run Code Online (Sandbox Code Playgroud)

因此,通过使用v-modelv-bind:value,您实际上最终会有v-bind:value 两次,这可能导致未定义的行为.

  • 答案并不完全正确。`v-model` 在不同的输入类型上绑定不同的属性。复选框上的“v-model”控制其“checked”属性而不是“value”。有关替代方法,请参阅@ricardoorellana 的答案。 (5认同)
  • 同样来自文档:v-bind:true-value="a" v-bind:false-value="b"。在我的例子中,我使用了 v-bind:true-value=1 v-bind:false-value=0 (2认同)

小智 19

在 v-model 中,属性的值可能不是严格的布尔值,并且复选框可能无法“识别”选中/未选中的值。VueJS 中有一个巧妙的功能可以转换为真或假:

<input
  type="checkbox"
  v-model="toggle"
  true-value="yes"
  false-value="no"
>
Run Code Online (Sandbox Code Playgroud)

  • Vue 2 中的相关文档:https://vuejs.org/v2/guide/forms.html#Checkbox-1 和 Vue 3 中的文档:https://v3.vuejs.org/guide/forms.html#checkbox-2 (3认同)

ric*_*ana 15

假设您想要将prop传递给子组件,并且prop是一个布尔值,它将确定是否选中了复选框,那么您必须将布尔值传递给v-bind:checked="booleanValue"更短的方式:checked="booleanValue",例如:

<input
    id="checkbox"
    type="checkbox"
    :value="checkboxVal"
    :checked="booleanValue"
    v-on:input="checkboxVal = $event.target.value"
/>
Run Code Online (Sandbox Code Playgroud)

这应该工作,复选框将显示复选框,其中包含当前的布尔状态(如果未选中则为true,如果未选中).

  • 那么“v-model”实际上绑定到“checked”,而不是“&lt;input type=checkbox&gt;”的“value”?那么在代码示例中绑定到值有什么意义呢? (3认同)
  • 给出的示例考虑到您希望将“checkbox”作为子组件,因此您不能简单地使用“v-model”,因为您想避免直接改变道具,因为每当父组件重新渲染时该值都会被覆盖。`v-model` 创建双向数据绑定并修改子组件中传递的 prop (3认同)

sho*_*nga 11

我有类似的要求,但我不想v-model在父组件中使用状态。然后我得到了这个工作:

<input
  type="checkbox"
  :checked="checked"
  @input="checked = $event.target.checked"
/>
Run Code Online (Sandbox Code Playgroud)

为了传递来自父级的值,我对此做了一个小改动并且它起作用了。

<input
  type="checkbox"
  :checked="aPropFrom"
  @input="$emit('update:aPropFrom', $event.target.checked)"
/>
Run Code Online (Sandbox Code Playgroud)