J'utilise la case à cocher angulaire pour sélectionner plusieurs données et j'essaie d'obtenir la valeur de la case à cocher du formulaire submit.Au lieu d'obtenir la valeur im, obtenir la valeur true.
export class CreatesessionComponent implements OnInit {
form : FormGroup ;
constructor(private formBuilder: FormBuilder) {
}
ngOnInit() {
this.form = this.formBuilder.group({
useremail : new FormArray([
new FormControl('',Validators.required)
])
});
}
}
userdata est un tableau dynamique que je vais obtenir à partir de la base de données
<div class = "row" formArrayName="useremail; let k = index">
<div class="col-md-8 col-sm-5 col-xs-12 col-lg-8">
<div *ngFor="let data of userdata">
<div class="col-md-6">
<input type="checkbox" name="useremail" formControlName ="{{k}}" [value]="data.email">{{data.email}}
</div>
</div>
</div>
</div>
Puisque vous souhaitez utiliser plusieurs valeurs, vous devez utiliser une variable FormArray
, étant donné que FormControl
ne peut capturer qu'une seule valeur.
Commencez par déclarer un formulaire videArray:
this.myForm = this.fb.group({
useremail: this.fb.array([])
});
Parcourez vos e-mails, surveillez l’événement change et transmettez-le à une méthode onChange
dans laquelle vous vérifiez si c’est checked
, puis ajoutez l’email correspondant à la table formarray. :
<div *ngFor="let data of emails">
<input type="checkbox" (change)="onChange(data.email, $event.target.checked)"> {{data.email}}<br>
</div>
Et onChange
:
onChange(email:string, isChecked: boolean) {
const emailFormArray = <FormArray>this.myForm.controls.useremail;
if(isChecked) {
emailFormArray.Push(new FormControl(email));
} else {
let index = emailFormArray.controls.findIndex(x => x.value == email)
emailFormArray.removeAt(index);
}
}
J'ai résolu de deux manières différentes Une avec une simple case à cocher tableau - mat-checkbox Et l'autre avec mat-selection-list.
Contenu du code dans le post. À la valeur, vous pouvez définir toutes sortes de combinaisons . Dans mon cas, j’ai utilisé la concatination id et description afin d’initier les contrôles de formulaire à la fin d’une source.
Mon problème était avec le nettoyage du tableau de cases à cocher dans un exemple plus simple .. Pas de temps à perdre .. Courir le long des tâches suivantes .. :)
J'ai fait cette fonction en entrée pour la sélection automatique du formulaire de chargement:
[vérifié] = "this.selected? this.selected.type.includes (type): false"
Code complet:
<label *ngFor="let type of this.entityType" class="checkbox-inline c-checkbox">
<input type="checkbox" [checked]="this.selected? this.selected.type.includes(type) : false" (change)="onChangeEntityType(type, $event.target.checked)"/>
<span class="fa fa-check"></span>{{type | translate}}</label>
Où
this.selected
est mon objet et
this.selected.type.includes (type)
vérification automatique si les cases à cocher seront cochées.
Vous pouvez obtenir un tableau de données vérifiées:
<input .... (change)="onChange(data)" />
onChange(data){
data.checked = !data.checked;
}
pour obtenir toutes les valeurs vérifiées
let checkedValues = userdata.filter(x => x.checked).map(x => x.email);