89 votes

Modification de la valeur d'une case à cocher en Angular 4

comment réaliser en Angular 4 que lors de l'enregistrement dans une case à cocher enregistrer une valeur "A" ou "B". J'ai beau essayer, il ne m'envoie que du vrai ou du faux, j'espère que quelqu'un pourra m'aider.

composant.d'enregistrement.ts

  this.userForm = new FormGroup({
   state: new FormControl('',),

  });

composant.d'enregistrement.html

<div class="form-group">
                <label>State</label>
          <input type="checkbox" [(ngModel)]="isChecked" (change)="checkValue(isChecked?'A':'B')" formControlName="state"/>
        </div>  

            <pre>{{userForm.value | json}}</pre>

De cette façon, je peux faire en sorte que la console affiche la valeur que je veux (A ou B) mais dans le JSON, c'est toujours vrai ou faux.

136voto

SHOHIL SETHIA Points 905

C'est ce que vous recherchez :

<input type="checkbox" [(ngModel)]="isChecked" (change)="checkValue(isChecked?'A':'B')" />

Dans votre classe :

checkValue(event: any){
   console.log(event);
}

Incluez également le FormsModule dans app.module.ts pour faire fonctionner le ngModel !

J'espère que cela vous aidera !

0 votes

Avec votre réponse je peux voir que la valeur change dans la console ("A", "B"), mais je dois ajouter que dans le registre j'ai envoyé un JSON, agrunpando dans un FormGroup et FormControl, dans le JSON il continue à envoyer true ou false , toute aide sur la façon de corriger cela ?

0 votes

Y a-t-il un moyen de l'analyser ? Je ne comprends pas votre problème actuel, !

0 votes

Solution simple et facile mais dans la console de mon navigateur, il était dit que "Il semble que vous utilisez ngModel sur le même champ de formulaire que formControlName. La prise en charge de l'utilisation de la propriété d'entrée ngModel et de l'événement ngModelChange avec les directives de formulaire réactif a été dépréciée dans Angular v6 et sera supprimée dans Angular v7." Pourtant, il fonctionne toujours. Est-ce que cela va fonctionner longtemps ou quoi ? pouvez-vous s'il vous plaît expliquer ?

88voto

balajivaishnav Points 1069

Faites un essai,

Modèle

<input (change)="FieldsChange($event)" value="angular" type="checkbox"/>

Fichier Ts

FieldsChange(values:any){
console.log(values.currentTarget.checked);
}

0 votes

Une réponse qui sauve des vies. Merci :)

0 votes

A fonctionné comme un charme

0 votes

Réponse exacte, merci beaucoup.

33voto

changed = (evt) => {    
this.isChecked = evt.target.checked;
}

<input type="checkbox" [checked]="checkbox" (change)="changed($event)" id="no"/>

9 votes

S'il vous plaît, ne vous contentez pas d'un bloc de code en guise de réponse. Une bonne réponse explique la solution et donne un contexte.

0 votes

$event.target.checked est ce que je recherchais, par opposition à $event.target.value pour les entrées

11voto

Je suppose que c'est ce que vous essayez d'obtenir.

<input type="checkbox" value="a" (click)="click($event)">A
<input type="checkbox" value="b" (click)="click($event)">B

click(ev){
   console.log(ev.target.defaultValue);
}

7voto

Axel186 Points 166

Une autre approche consiste à utiliser ngModelChange :

Modèle :

<input type="checkbox" ngModel (ngModelChange)="onChecked(obj, $event)" />

Contrôleur :

onChecked(obj: any, isChecked: boolean){
  console.log(obj, isChecked); // {}, true || false
}

Je préfère cette méthode parce qu'ici vous obtenez l'objet pertinent et true / false les valeurs d'une case à cocher.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X