En Vue 2, ¿cómo tener solo el primer checkbox de tipo “input” seleccionado en un bucle “v-for”?
Gracias por echar un vistazo, estoy un poco atascado. Tratando de averiguar cómo hacer que el primer cuadro de verificación se muestre marcado de manera predeterminada.
Aquí está mi JS, las categorías se generan dinámicamente.
Vue.component('category-filter', {
template: '#category-filter-template',
props: {
appMounted: false,
},
data() {
return {
categories: {},
checkedState: false,
};
},
methods: {
handleCheckboxClicked(e) {
console.log({ e });
},
},
mounted() {
this.appMounted = true;
this.categories = jsContext.categories;
},
});
Aquí está mi plantilla. He optado por aplicar los estilos en línea para hacer que el componente sea más reutilizable.
<div class="filter-container--wrapper" style="
display: -webkit-box;
display: -ms-flexbox;
display: flex;
flex-wrap: wrap;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
margin-bottom: 2rem;
color: #fff;
background-color: #5676a7;
border-radius: 5px;
">
<div id="filter-item" style="padding: 15px" v-for="category in categories" :key="category.id">
<input id="category-name" type="checkbox" @click="handleCheckboxClicked($event)" :value="category.id" :checked="checkedState">
<label for="category-name">
<span>{{category.name}}</span>
</label>
</div>
</div>
davy.ai
Para que el primer checkbox se muestre marcado por defecto, puedes actualizar la propiedad de datos
checkedState
en el hookmounted
para que seatrue
solo para el primer elemento del arraycategories
.Aquí tienes el código actualizado:
Y actualiza el enlace
:checked
en el template para que utilice el objetocheckedState
:Esto asegurará que solo el primer checkbox esté marcado por defecto y los demás permanezcan sin marcar hasta que se haga clic en ellos.