Encyclopédie des erreurs

Valeur de contrôle manquante

Cette erreur survient lorsque vous appelez setValue sur un FormGroup ou un FormArray mais que la valeur transmise ne contient pas d'entrée pour l'un des contrôles enregistrés.

setValue est strict — il attend une valeur pour chaque contrôle. Si vous ne voulez mettre à jour que certains contrôles, utilisez plutôt patchValue.

Déboguer l'erreur

Repérez le contrôle nommé dans le message d'erreur, puis assurez-vous que votre objet de valeur l'inclut.

Une cause fréquente de cette erreur est la décomposition d'un objet qui ne possède pas toutes les clés :

const someValue = {first: 'Nancy'}; // 'last' is missing

form.setValue({...someValue}); // throws NG01002

Cela peut arriver si someValue provient d'une réponse d'API, d'une mise à jour partielle de l'état ou d'un type qui ne correspond pas entièrement à la structure du formulaire. Dans ces cas, renseignez explicitement les clés manquantes ou passez à patchValue.

FormGroup

const form = new FormGroup({
  first: new FormControl(''),
  last: new FormControl(''),
});

// 'last' is not in the value — throws NG01002
form.setValue({first: 'Nancy'});

// both controls are covered — works fine
form.setValue({first: 'Nancy', last: 'Drew'});

FormArray

const formArray = new FormArray([new FormControl(''), new FormControl('')]);

// only one value for two controls — throws NG01002
formArray.setValue(['Nancy']);

// one value per control — works fine
formArray.setValue(['Nancy', 'Drew']);