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']);