Tengo una serie de datos que estoy recorriendo en mi aplicación. Cada elemento contiene el campo checked que representa si la casilla de verificación de ese elemento debe estar marcada o no. De forma predeterminada, está configurado como checked: false en mi archivo list.html .
<ion-item lines="full" *ngFor="let item of items"> <ion-label [class.strike]="item.checked" class="ion-padding ion-text-wrap"> {{ item.title }} </ion-label> <ion-checkbox slot="start" [(ngModel)]="item.checked" mode="ios" (ionChange)="itemChecked(item)"></ion-checkbox> </ion-item> Al cambiar la casilla de verificación que se selecciona usando ionChange , llamo a mi método itemChecked y le paso mi item .
async itemChecked(item: Item) { console.log(item); //I can see checked has been updated. await this.firestore.updateItemKey(item, 'checked'); } Luego, en mi archivo de servicio firestore , actualizo el documento así:
updateItemKey(item: Item, key: string) { const itemDocRef = doc(this.firestore, `items/${item.id}`); return updateDoc(itemDocRef, { key: item[key] }); } Sin embargo, de vuelta en mi archivo list.html , ¿el elemento no se está verificando y nada se actualiza correctamente en mi base de datos de firebase? El elemento se muestra rápidamente como marcado y luego vuelve inmediatamente a no marcado.
¿Alguna idea sobre lo que pude haber pasado por alto o haber hecho incorrectamente que está causando este problema?
En lugar de [(ngModel)]="item.checked" , creo que deberías ir con [checked]="item.checked" , y en itemChecked() haz item.checked = !item.checked porque te gustaría actualice el enlace [marcado] con un nuevo valor. Por supuesto, también debe manejar el resultado comprobado == falso de ionChange.