Botón Radio de Angular / Typescript con dos modelos
No sé cómo expresar mi problema, quizás por eso no puedo encontrar una solución.
Tengo un ngFor pero necesito enlazar otra lista de datos para mostrar las opciones seleccionadas:
Tengo una lista de héroes:
[
{id: 1, nombre:'Superman'},
{id: 2, nombre:'Batman'},
{id: 5, nombre:'BatGirl'},
{id: 3, nombre:'Robin'},
{id: 4, nombre:'Flash'}
];
Luego muestro una lista de selección de la siguiente manera:
<div class="form-check" *ngfor="let p of heroes">
<input class="form-check-input" type="checkbox" value="{{p.id}}" id="{{p.id}}">
<label class="form-check-label" for="{{p.id}}">
{{p.nombre}}
</label>
</div>
Luego tengo la persona con sus superhéroes favoritos en otra lista:
{id: 1, nombre: 'Jack', superhéroesFavoritos: [{id: "1"}, {id: "2"}]}
¿Cómo obtengo los datos para enlazarlos con los cuadros de selección?
Aquí es donde estoy trabajando en ello: https://stackblitz.com/edit/angular-ivy-muaxwi?file=src/app/app.component.html
davy.ai
Para vincular las casillas de verificación con los héroes seleccionados de la lista de personas, puede utilizar la directiva
ngModel
y verificar si el ID del héroe está incluido en el arrayfavoriteSuperHeroes
de la persona.En primer lugar, modifique su etiqueta de entrada para utilizar
ngModel
y vincularla a una propiedad en el componente:En este caso, estamos vinculando el valor de la casilla de verificación a
p.id
, y utilizando[(ngModel)]
para vincular el estado de la casilla de verificación a la funciónisChecked
del componente.A continuación, en la clase del componente, agregue la función
isChecked
que toma elid
del héroe y verifica si está incluido en el arrayfavoriteSuperHeroes
de la persona:Aquí, la función
isChecked
toma elheroId
como parámetro, y verifica si eseid
existe en el arrayfavoriteSuperHeroes
utilizando el métodosome
. Si elheroId
existe en el array,isChecked
devuelvetrue
, y la casilla de verificación está seleccionada.Por último, puede utilizar la función
isChecked
en la directivangIf
para mostrar únicamente los héroes seleccionados de la lista de la persona:En este código, utilizamos
*ngIf
para mostrar el nombre del héroe seguido de una marca de verificación si la casilla de verificación está seleccionada (es decir, siisChecked(p.id)
devuelvetrue
). De lo contrario, la marca de verificación no se muestra.También puede encontrar el código actualizado en https://stackblitz.com/edit/angular-ivy-jes7ac?file=src/app/app.component.html.