Exigeant une case à cochée
Je veux un bouton sera désactivé jusqu'à ce qu'une case à cocher a été vérifié à l'aide d'un FormBuilder Angulaire. Je ne veux pas explicitement vérifier la valeur de la case et préfèrent utiliser un validateur pour que je puisse vérifier simplement form.valid
.
Dans les deux cas de validation ci-dessous la case à cocher est
interface ValidationResult {
[key:string]:boolean;
}
export class CheckboxValidator {
static checked(control:Control) {
return { "checked": control.value };
}
}
@Component({
selector: 'my-form',
directives: [FORM_DIRECTIVES],
template: ` <form [ngFormModel]="form" (ngSubmit)="onSubmit(form.value)">
<input type="checkbox" id="cb" ngControl="cb">
<button type="submit" [disabled]="!form.valid">
</form>`
})
export class SomeForm {
regForm: ControlGroup;
constructor(fb: FormBuilder) {
this.form = fb.group({
cb: [ CheckboxValidator.checked ]
//cb: [ false, Validators.required ] <-- I have also tried this
});
}
onSubmit(value: any) {
console.log('Submitted: ', this.form);
}
}
- Quel est donc le problème, votre deuxième version fonctionne très bien
[ false, Validators.required ]
. - Dans le second cas, pour moi au moins, le
this.form.value
est{ cb: false }
etthis.form.valid
esttrue
- Regardez la réponse.
this.form.valid
n'est pas plustrue
. - Maintenant, vous pouvez utiliser
Validators.requiredTrue
Vous devez vous connecter pour publier un commentaire.
.ts
Travail Plunker.
S'il vous plaît laissez-moi savoir si les changements requis.
required
dans le code HTML qui est vraiment ce que j'essayais d'éviter. Mais de l'enlever pour votre plnkr continuera de fonctionner comme prévu. Cependant, la plnkr est à l'aide de la bêta.0. Si vous supprimez lerequired
en HTML et de les déplacer à la bêta.6, cela ne fonctionne plus. Cela peut être un bug Angulaire.cb: ['', Validators.required]
. Si vous modifiez votre réponse, je vais le marquer comme étant correcte.' '
.Mais comme vous pouvez le vérifier cela fonctionne aussi très bien avec pas de problème. Vous pouvez le marquer comme un aswer. Je vais le mettre à jour avec// cb:[' ',Validators.required]
. ainsi, les autres utilisateurs seront en mesure de voir d'autres façons d'utiliservalidator.required
.Validators.requiredTrue
pour qu'il fonctionne correctement. Sinon, si vous cochez et décochez il sera encore "valide".Vous pouvez simplement utiliser un ValidatorPattern et vérifier la droite (boolean) valeur:
et voici la liaison:
formControlName="isTosRead"
plutôt que[formControl]="..."
.Depuis Angulaire 2.3.1 vous pouvez utiliser
Validateurs#requiredTrue
:Composant:
Modèle:
STACKBLITZ DÉMO
J'ai trouvé que le Validateur.requis ne fonctionne pas correctement pour les cases à cocher.
Si vous cochez une case, puis décochez la case, le FormControl montrent encore comme valide, même si elle n'est pas cochée. Je pense qu'il vérifie seulement que vous la définissez à quelque chose, que ce soit vrai ou faux.
Voici un rapide simple validateur vous pouvez ajouter à votre FormControl:
Validators.requiredTrue
au lieu deValidators.required
.Cela a été résolu dans Angulaire de la version 2.3.0.
Suffit d'utiliser:
Validators.requiredTrue instead of Validators.required
.J'ai ce vraiment simple exemple:
Dans votre composant:
Dans votre code HTML: