Establecer una casilla de verificación como marcada con Vue.js

5 minutos de lectura

He estado buscando en Google y jugando con todas las combinaciones que conozco, pero no puedo hacer que mis casillas de verificación se inicialicen como marcadas.

Ejemplo:

<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>

Un ejemplo de los datos de los módulos:

[
    {
        "id": 1,
        "name": "Business",
        "checked": true
    },
    {
        "id": 2,
        "name": "Business 2",
        "checked": false
    },
]

¿Qué puedo hacer para establecer inicialmente el estado marcado de las casillas de verificación?

  • cual es el valor de form.modules?

    – rogeriolino

    6 de diciembre de 2016 a las 17:28

avatar de usuario de asemahle
asemejar

Para establecer el estado de la casilla de verificación, debe vincular el modelo v a un valor. La casilla de verificación se marcará si el valor es verdadero. En este caso, está iterando sobre modules y cada module tiene un checked propiedad.

El siguiente código vinculará la casilla de verificación a esa propiedad:

<input type="checkbox" v-model="module.checked" v-bind:id="module.id">

Si desea obtener más información sobre cómo funciona v-model en esta situación, aquí hay un enlace a la documentación sobre el enlace de entrada de formulario.

  • También de los documentos: v-bind:true-value=”a” v-bind:false-value=”b”. En mi caso usé v-bind:true-value=1 v-bind:false-value=0

    – McMacerson

    11 de noviembre de 2017 a las 13:20

  • La respuesta no es realmente correcta. v-model vincula diferentes atributos en diferentes tipos de entrada. v-model en las casillas de verificación controla su checked atributo en lugar de value. Vea la respuesta de @ ricardoorellana para un enfoque alternativo.

    – asologor

    21 de enero de 2020 a las 9:27

  • Este You shouldn't use v-model and v-bind:value on the same element no es cierto para las casillas de verificación. estoy usando correctamente <input type="checkbox" v-for="item in items" v-model="selectedIDs" v-bind:value="item.id"> dónde selectedIDs es una matriz de ID de casillas de verificación marcadas. Por lo tanto, el valor DEBE SER utilizado. ¿Cómo sabría Vue qué valor agregar a la matriz sin v-bind:value?

    – Mikep

    14 de marzo a las 16:10

  • Tienes razón. He editado la respuesta para eliminar la información incorrecta.

    – asemahlé

    1 sep a las 23:38

Supongamos que desea pasar un accesorio a un componente secundario y ese accesorio es un booleano que determinará si la casilla de verificación está marcada o no, luego debe pasar el valor booleano al v-bind:checked="booleanValue" o el camino más corto :checked="booleanValue"por ejemplo:

<input
    id="checkbox"
    type="checkbox"
    :value="checkboxVal"
    :checked="booleanValue"
    v-on:input="checkboxVal = $event.target.value"
/>

Eso debería funcionar y la casilla de verificación mostrará la casilla de verificación con su estado booleano actual (si está marcado como verdadero, si no está sin marcar).

  • asi que v-model en realidad se une a checkedNo a value con <input type=checkbox>? Entonces, ¿cuál es el punto de vincular también al valor en su ejemplo de código?

    – phil294

    8 de noviembre de 2019 a las 9:03


  • El ejemplo dado considera que quieres tener tu checkbox como un componente secundario, por lo que no puede usar v-model simplemente porque desea evitar mutar un accesorio directamente, ya que el valor se sobrescribirá cada vez que se vuelva a renderizar el componente principal. v-model crea enlaces de datos bidireccionales y modifica la propiedad pasada en el componente secundario

    – ricardoorellana

    8 de noviembre de 2019 a las 15:58

  • ¿Es posible vincular :checked al resultado de una función y pasarle argumentos? Algo como :checked="method(id)"?

    – HMR

    28 de febrero de 2020 a las 8:51

  • Sí, eso es válido y posible @HMR

    – ricardoorellana

    29 de febrero de 2020 a las 0:09

En el modelo v, el valor de la propiedad podría no ser un valor booleano estricto y la casilla de verificación podría no “reconocer” el valor como marcado/sin marcar. Hay una característica interesante en VueJS para hacer la conversión a verdadero o falso:

<input
  type="checkbox"
  v-model="toggle"
  true-value="yes"
  false-value="no"
>

avatar de usuario de shotasenga
tirosenga

Tenía requisitos similares pero no quería usar v-model tener el estado en el componente principal. Entonces conseguí que esto funcionara:

<input
  type="checkbox"
  :checked="checked"
  @input="checked = $event.target.checked"
/>

Para transmitir el valor del padre, hice un pequeño cambio en esto y funciona.

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

Experimenté este problema y no pude encontrar una solución durante unas horas, hasta que me di cuenta de que tenía incorrectamente prevented eventos nativos ocurran con:

<input type="checkbox" @click.prevent="toggleConfirmedStatus(render.uuid)"
    :checked="confirmed.indexOf(render.uuid) > -1"
    :value="render.uuid"
/>

la eliminación de la .prevent desde el @click el controlador solucionó mi problema.

avatar de usuario de muhammad ahmad
muhammad ahmad

<input v-if = "module.checked == true" checked type="checkbox" >
<input v-else-if = "module.checked == false"  type="checkbox" >

He resuelto esto con el uso de v-if y v-else-if

Avatar de usuario de Bitrevo
Bitrevo

Utilizo tanto la entrada oculta como la casilla de verificación para garantizar que se envíe 0 o 1 al formulario. Asegúrese de que el nombre del campo sea el mismo para que solo se envíe una entrada al servidor.

<input type="hidden" :name="fieldName" value="0">
<input type="checkbox" :name="fieldName" value="1" :checked="checked">

¿Ha sido útil esta solución?