FormGroup이나 FormArray에서 setValue를 호출할 때 전달한 값에 등록된 컨트롤 중 하나의 항목이 빠져 있으면 이 오류가 발생합니다.
setValue는 모든 컨트롤의 값이 있어야 한다는 조건을 엄격하게 적용합니다. 일부 컨트롤만 갱신하려면 patchValue를 사용하세요.
오류 디버깅
오류 메시지에 어떤 컨트롤이 표시되는지 확인하고, 값 객체에 해당 컨트롤의 값이 포함되어 있는지 확인하세요.
모든 키가 들어 있지 않은 객체를 전개할 때 이 오류가 흔히 발생합니다.
const someValue = {first: 'Nancy'}; // 'last'가 누락됨
form.setValue({...someValue}); // NG01002 발생
someValue가 API 응답이나 부분적인 상태 갱신에서 왔거나 폼 구조와 완전히 일치하지 않는 타입인 경우 이런 문제가 발생할 수 있습니다. 이때는 누락된 키를 명시적으로 채우거나 patchValue로 바꾸세요.
FormGroup
const form = new FormGroup({
first: new FormControl(''),
last: new FormControl(''),
});
// 값에 'last'가 없음: NG01002 발생
form.setValue({first: 'Nancy'});
// 두 컨트롤의 값을 모두 제공하므로 정상 동작
form.setValue({first: 'Nancy', last: 'Drew'});
FormArray
const formArray = new FormArray([new FormControl(''), new FormControl('')]);
// 두 컨트롤에 값 하나만 제공함: NG01002 발생
formArray.setValue(['Nancy']);
// 컨트롤마다 값을 하나씩 제공하므로 정상 동작
formArray.setValue(['Nancy', 'Drew']);